首页 百科知识 系统打开文件表

系统打开文件表

时间:2022-10-09 百科知识 版权反馈
【摘要】:Linux系统内核把所有进程打开的文件集中管理,把它们组成系统打开文件表。整个系统运行期间维护一张系统打开文件表。它采用file结构双向链表的形式,用来记录系统已打开的所有文件信息。每个打开的文件均有一个读写指针指示文件当前操作的位置,称文件位置。

6.4.1 系统打开文件表

Linux系统内核把所有进程打开的文件集中管理,把它们组成系统打开文件表。整个系统运行期间维护一张系统打开文件表。它采用file结构双向链表的形式,用来记录系统已打开的所有文件信息。它的每个表项(节点)是一个file结构,称为文件描述符,其中存放着一个已打开文件的管理控制信息。进程每次打开一个文件就建立一个file结构体,并把它加入到系统打开文件链表中。每个打开的文件均有一个读写指针指示文件当前操作的位置,称文件位置。由于文件能够共享,多个进程可同时打开同一个文件,对该文件设置不同的文件位置,系统打开文件表的file节点保存每个打开文件的文件位置,file节点中还保存了指向该文件索引节点inode的指针,及对应文件操作函数集f_op等。

全局变量first_file指向系统打开文件表的表头。

struct file {

 mode_t f_mode;  /* 文件的打开模式 */

 loff_t f_pos;   /* 文件的当前读写位置 */

 unsigned short f_flags; /* 文件操作标志 */

 unsigned short f_count; /* 共享该结构体的计数值 */

 unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;

 struct file *f_next, *f_prev; /* 链接前后节点的指针 */

 struct fown_struct f_owner;  /* SIGIO用PID */

 struct inode * f_inode;    /* 指向文件对应的inode */

 struct file_operations * f_op;/* 指向文件操作结构体的指针 */

 unsigned long f_version;   /* 文件版本 */

 void *private_data; /* 指向与文件管理模块有关的私有数据的指针 */

};

f_mode是文件创建或打开时指定的文件属性,包括文件操作模式和访问权限。符号常量FMODE_READ(读)和FMODE_WRITE(写)

f_flags指定了文件打开后的处理方式:O_RDONLY仅为读操作打开文件,O_WRONLY仅为写操作打开文件,O_RDWR为读和写操作打开文件等。

f_pos记载文件中当前读写处理所在的字节位置,相当是文件内部的一个位置指针。

f_inode指向文件对应的VFS i节点。

f_count记载的是共享该file结构体的进程的数目。

i_count记载共享此文件的独立进程数目。

f_op指向对文件进行操作的函数指针集合。

file_operations结构。通过f_op对不同文件系统的文件调用不同的操作函数。

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

我要反馈