APUE 1 - Unix数据结构
Unix 类操作系统支持不同进程间共享文件。对于所有的I/O,内核使用3种数据结构来表示一个打开的文件。
- 进程表。每个进程在进程表中有其相应的入口。文件结构中,每个进程表的入口是文件描述符表,每个文件描述符表中的文件描述符关联着两个东西,一个是此文件描述符的标志(一般指close-on-exec,如果此标志被设置了,那么进程在执行exec函数时,父进程中此文件描述符会被关闭);一个是指向一个文件表的入口。
- 内核包含一个所有打开文件的文件表,这个表中的每个入口包含三个东西,一个是文件状态标志,如 读、写、追加、同步等;一个是此文件当前偏移位置;还有一个是指向 v-node表(linux下没有v-node, 它直接使用的i-node)响应入口的指针。
- 每个打开的文件或设备拥有一个类似v-node的结构,包含着文件类型和指向操作此文件的所有函数的指针。对于大多数文件,v-node 包含着此文件的i-node信息。
由上图可见,两个独立的进程中,他们的文件描述符是相对另一个进程独立的,他们中的不同或相同文件描述符可以指向同一个文件,但是他们拥有不同的文件表入口,并以此控制这个各自对此文件的读写偏移及文件状态信息。
企者不立,跨者不行;
自见者不明,自是者不彰;
自伐者无功,自矜者不长。