内核使用三种数据结构表示打开的文件,分别是文件描述符表、文件表和 V 节点表。它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。
图 1 显示了一个进程的三张表之间的关系。该进程有两个不同的打开文件,一个文件打开为标准输入(文件描述符为 0),另一个打开为标准输出(文件描述符为 1)。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图 1: 一个进程打开两个文件的内核数据结构
图 2 给出了两个进程打开同一个文件的内核数据结构。假定第一个进程在文件描述符 3 上打开该文件,而另一个进程在文件描述符 4 上打开该文件。打开该文件的每个进程都得到一个文件表项,但对一个给定的文件只有一个 v 节点表项。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 图 2: 两个进程打开同一个文件的内核数据结构
有了这些数据结构,对一些概念和操作有以下说明: