FILE结构体与文件描述符

来源:互联网 发布:怒战辅助软件 编辑:程序博客网 时间:2024/04/29 16:27

文件描述符file descriptors,简称fd):它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表(file_struct)。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。文件描述符是一个非负整数。

在Linux中,进程是通过文件描述符访问文件的。


文件描述符表(file_struct):每个PCB都有file_struct记录文件描述符的使用情况,是进程的私有数据。文件描述符表的每一项都有一个指向被打开的文件的指针。

已经打开的文件在内核中用FILE结构体表示,所以文件描述符表指向FILE结构体。

文件描述符与FILE结构体的关系图如下:


其中,0、1、2是既定的标准文件描述符,普通文件的描述符一般情况下从3开始。

这三个标准文件通常是默认打开的,若是关闭其中一个时,普通文件的描述符就从第一个没有被占用的描述符开始。

标准文件描述符图如下:

注:POSIX表示可移植操作系统接口,POSIX标准定义了操作系统应该为应用程序提供的接口标准。

接下来就来看一下FILE结构体:

file结构体在stdio.h中有如下定义:

struct _iobuf {
char *_ptr; //文件输入的下一个位置
int _cnt; //当前缓冲区的相对位置
char *_base; //指基础位置(即是文件的其始位置)
int _flag; //文件标志
int _file; //文件的有效性验证
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取
int _bufsiz; //文件的大小
char *_tmpfname; //临时文件名
};
typedef struct _iobuf FILE;

总结:每个文件描述符都有一个文件描述符表,而文件描述符表的每一项都指向FILE结构体。


0 0
原创粉丝点击