FILE结构体与文件描述符

xiaoxiao2021-02-28  116

文件描述符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结构体。

转载请注明原文地址: https://www.6miu.com/read-82348.html

最新回复(0)