对于内核:
Linux在内核源文件/usr/src/kernel/`uname -r`/include/linux/fs.h中定义了struct file结构是用来保存打开文件基本信息的。
对于用户空间来说:
任何打开的文件都将被分配一个唯一非负整数,用于标识该打开文件,该值即为文件描述符,它是一个大于等于0的整数。在任何进程运行时默认都已经打开了三个流对象和它们的文件描述符:stdin:0,stdout:1,stderr:2。
以后打开文件的文件描述符的值一般选用末使用的最小值。在用户空间要想获取文件描述符,可以使用函数:extern int fileno(FILE *__stream);
由以上可知,ANSIC库IO函数其实是对POSIX IO函数的封装,在其基础上加了流的概念,并在用户空间申请了流资源。
(1)获取文件流描述符:
extern int fileno(FILE *__stream);
(2)将文件流描述符与一个流相连接:
extern FILE *fdopen(int __fd, __const char * __modes);
如果失败,则返回NULL;成功则返回流对象。

本文详细阐述了Linux内核中struct file结构及其作用,解释了文件描述符的概念与用途,包括如何获取文件流描述符及与流相连接的方法。重点介绍了ANSIC库IO函数对POSIX IO函数的封装,以及在用户空间如何管理和操作文件流。
1365

被折叠的 条评论
为什么被折叠?



