Unix 類操做系統支持不一樣進程間共享文件。對於全部的I/O,內核使用3種數據結構來表示一個打開的文件。node
- 進程表。每一個進程在進程表中有其相應的入口。文件結構中,每一個進程表的入口是文件描述符表,每一個文件描述符表中的文件描述符關聯着兩個東西,一個是此文件描述符的標誌(通常指close-on-exec,若是此標誌被設置了,那麼進程在執行exec函數時,父進程中此文件描述符會被關閉);一個是指向一個文件表的入口。
- 內核包含一個全部打開文件的文件表,這個表中的每一個入口包含三個東西,一個是文件狀態標誌,如 讀、寫、追加、同步等;一個是此文件當前偏移位置;還有一個是指向 v-node表(linux下沒有v-node, 它直接使用的i-node)響應入口的指針。
- 每一個打開的文件或設備擁有一個相似v-node的結構,包含着文件類型和指向操做此文件的全部函數的指針。對於大多數文件,v-node 包含着此文件的i-node信息。
由上圖可見,兩個獨立的進程中,他們的文件描述符是相對另外一個進程獨立的,他們中的不一樣或相同文件描述符能夠指向同一個文件,可是他們擁有不一樣的文件表入口,並以此控制這個各自對此文件的讀寫偏移及文件狀態信息。linux