Unix 类操做系统支持不一样进程间共享文件。对于全部的I/O,内核使用3种数据结构来表示一个打开的文件。node
- 进程表。每一个进程在进程表中有其相应的入口。文件结构中,每一个进程表的入口是文件描述符表,每一个文件描述符表中的文件描述符关联着两个东西,一个是此文件描述符的标志(通常指close-on-exec,若是此标志被设置了,那么进程在执行exec函数时,父进程中此文件描述符会被关闭);一个是指向一个文件表的入口。
- 内核包含一个全部打开文件的文件表,这个表中的每一个入口包含三个东西,一个是文件状态标志,如 读、写、追加、同步等;一个是此文件当前偏移位置;还有一个是指向 v-node表(linux下没有v-node, 它直接使用的i-node)响应入口的指针。
- 每一个打开的文件或设备拥有一个相似v-node的结构,包含着文件类型和指向操做此文件的全部函数的指针。对于大多数文件,v-node 包含着此文件的i-node信息。

由上图可见,两个独立的进程中,他们的文件描述符是相对另外一个进程独立的,他们中的不一样或相同文件描述符能够指向同一个文件,可是他们拥有不一样的文件表入口,并以此控制这个各自对此文件的读写偏移及文件状态信息。linux