每打開一個文件,內核使用3種數據結構表示打開文件,它們之間的關系決定了在文件共享方面一個進程對另一個進程可能產生的影響。
- (1)每個進程都有一個進程表,表的每一項代表了一個打開的文件。表項中包含的內容如下
- a.文件描述符 fd。
- b.指向一個文件表項的指針。
- (2)內核為所有打開文件維持一張文件表。每個文件表項包含:
- a.文件狀態標志(讀、寫、添寫、同步和非阻塞等)
- b.當前文件偏移量
- c.指向該文件V節點表項的指針
- (3)每個打開文件(或設備)都有一個v節點結構,每個v節點結構包含:
- a.文件類型
- b.對文件的各種操作函數指針
- c.i節點(大多數文件)
Linux中沒有使用V節點而是直接使用了i節點
三張表的對應關系如下