首页 百科知识 进程的文件管理

进程的文件管理

时间:2022-10-09 百科知识 版权反馈
【摘要】:进程打开文件信息:指向file_struct结构的指针,包含用户打开文件表,是该进程对全部已打开文件进行具体访问的接口。在Linux中,进程是通过文件描述符来访问文件的,文件描述符是一个整数,其作用是描述某个进程同时打开使用的文件序号。Linux规定每个进程最多同时打开使用256个文件描述符。fd[]数组的下标称为文件标识号。

6.4.2 进程的文件管理

对于一个进程打开的所有文件,由进程的两个私有结构进行管理。

记录文件系统信息:指向fs_struct结构的指针,主要数据是文件系统根目录和当前目录所对应的I节点号,指向系统打开文件表。

进程打开文件信息:指向file_struct结构的指针,包含用户打开文件表,是该进程对全部已打开文件进行具体访问的接口

struct fs_struct {

 int count;  /* 共享此结构的计数值 */

 unsigned short umask; /* 文件掩码 */

 struct inode * root, * pwd;    /* 根目录和当前目录inode指针 */

};

root是指向当前目录所在的文件系统的根目录inode,在按照绝对路径访问文件时就从这个指针开始。pwd是指向当前目录inode的指针,相对路径则从这个指针开始。

在Linux中,进程是通过文件描述符(简称fd)来访问文件的,文件描述符是一个整数,其作用是描述某个进程同时打开使用的文件序号。Linux规定每个进程最多同时打开使用256个文件描述符。每个进程用一个用户打开文件表描述进程当前使用fd的情况,该表采用files_struct结构数组,包含了进程当前所打开文件的fd及指向系统打开文件表中某一节点的指针。

#define NR_OPEN 256

struct files_struct {

 int count;  /* 共享该结构的计数值 */

 fd_set close_on_exec;

 fd_set open_fds;

 struct file * fd[NR_OPEN];

};

fd[]每个元素是一个指向file结构体的指针,该数组称为进程打开文件表。进程每打开一个文件时,建立一个file结构体,并加入到系统打开文件表中,然后把该file结构体的首地址写入fd[]数组的第一个空闲元素中。一个进程所有打开的文件都记载在fd[]数组中。fd[]数组的下标称为文件标识号。

img42

图6-7 进程与文件系统数据结构关系

在Linux中,进程使用文件名打开一个文件。在此之后对文件的识别就不再使用文件名,而直接使用文件标识号。在系统启动时文件标识号0、1、2由系统分配:0标识输入设备,1标识输出设备,2标识错误输出设备。

进程与文件系统数据结构的关系参见图6.7。

当一个进程通过fork()创建一个子进程后,子进程共享父进程的打开文件表,子进程两者的打开文件表中下标相同的两个元素指向同一个file结构。 这时file的f_count计数值增1。一个文件可以被某个进程多次打开,每次都分配一个file,并占用该进程打开文件表fd[]的一项,得到一个文件标识号。但它们的file中的f_inode都指向同一个inode。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈