FILE结构体剖析

grep -rn "struct _IO_FILE {" --include="*.h" /usr/include

现代的FILE结构体在不断变化,不同的环境有所区别。

// 其中一种实现方式 源自VS2010
typedef struct _iobuf
{
    char *_ptr;
    int _cnt;
    char *_base; //文件缓冲区指针
    int _flag; //文件标志位
    int _file; //文件描述符
    int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
    int _bufsiz; //缓冲区长度
    char *_tmpfname; //临时文件名
}FILE;

但是万变不离其宗,他们都至少有很多通用的结构体成员。

  • 文件读写位置

该成员的记录着当前读/写的位置 相对于文件开始位置的偏移

  • 文件读写模式

该成员表示着在打开该结构体所标识的文件的时候是以什么权限打开的防止用户对文件的不合法的操作。 比如 以只读方式打开的文件,在调用函数往该文件写入的时候能够进行一个错误检测。

  • 文件缓冲区指针和缓冲区长度

    文件缓冲区指针保存着该文件的文件缓冲区的首地址。缓冲区长度在Linux下一般为8192字节。 缓冲区的作用是提高操作文件的效率。