对于内核:
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;成功则返回流对象。