每打开一个文件,内核使用3种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。
- (1)每个进程都有一个进程表,表的每一项代表了一个打开的文件。表项中包含的内容如下
- a.文件描述符 fd。
- b.指向一个文件表项的指针。
- (2)内核为所有打开文件维持一张文件表。每个文件表项包含:
- a.文件状态标志(读、写、添写、同步和非阻塞等)
- b.当前文件偏移量
- c.指向该文件V节点表项的指针
- (3)每个打开文件(或设备)都有一个v节点结构,每个v节点结构包含:
- a.文件类型
- b.对文件的各种操作函数指针
- c.i节点(大多数文件)
Linux中没有使用V节点而是直接使用了i节点
三张表的对应关系如下