Linux系统中每位进程都有两个数据结构拿来描述进程与文件相关的信息,其中一个是fs_struct结构,它包含两个指向VFS索引节点的表针,分别指向root(即根目录节点)和pwd(即当前目录节点);
另一个是files_struct结构,它保存该进程打开文件的有关信息。每位进程才能同时打开的文件至多是256个linux操作系统结构,分别由fd[0]~fd[255]所表示的表针指向对应的file结构。上面在I/O重定向中用到的文件描述字(如0、1、2等)似乎就是fd表针字段的索引下标。
在file结构中linux操作系统结构,f_mode是文件打开的模式,如“只读”、“只写”、“读写”等;f_pos是文件当前的读写位置;
f_flag包含许多标志位,用以表示文件的一些属性;f_count表示对该文件的共享计数;f_inode指向VFS中该文件的索引节点;f_op是指向file_operations结构的表针,该结构中包含了对该文件进行操作的各类类库。借助f_op可以针对不同的文件定义不同的操作函数。
Linux系统进程启动时手动打开三个文件linux更改ip地址,即标准输入、标准输出和标准错误输出linux操作系统培训,它们的文件描述字分别是0、1和2。假如在进程运行时进行输入输出重定向,则这种文件描述字就指向给定的文件,而不是标准的终端输入/输出。
每每进程打开一个文件时,就从files_struct结构中找一个空闲的文件描述字,使它指向打开文件的描述结构file。对文件的操作要通过file结构中定义的文件操作类库和VFS索引节点的信息来完成。