什么是"文件表項"
時間:2018-09-26 來源:未知
從Linux的層次角度來說,在用戶空間是存在這樣的概念的,這個概念是存在內核空間的,而且是針對打開的文件的!
內核用三種數據結構來描述一個打開的文件。
數據結構一:
文件描述符表(descriptor table):
每個進程都有它獨立的描述符表,它的表項是由進程打開的文件描述符來索引的。每個打開的文件描述符表項指向文件表中的一個表項。形象化的表示應該是這個樣子.

數據結構二:
·打開的文件表(fìle table) 。
所有"打開的文件"的集合!所有進程共享這張表!打開的文件表的表項,即是文件表項.
文件表項的內容包含:
當前的文件位置、引用計數(referencecount) (即當前指向該表項的描述符表項數),以及一個指向v-node 表中對應表項的指針。打開文件的集合是由一張文件表來表示的,所有的進程共享這張表。
文件表項的樣子:

數據結構三:
v-node 在(v-node table) 。同文件表一樣,所有的進程共享這張v-node 表。每個打開的文件(或設備)都有一個V節點(v-node)結構.v節點包含了"文件類型" 、對該文件進行各種操作的函數指針。注: 對大多數文件來說,v節點還包含了該文件的i-node節點這些信息是在打開文件是從磁盤上讀入內存的,所以所有關于文件的信息都是快速可供使用的!
i-node節點包含的信息:
1>.文件所有者
2>.文件長度
3>.文件所在的設備
4>.指向文件實際在磁盤上所在位置的指針
三者之間的關系如下圖所示:

(CWY注:這里的"文件表"指的是打開的文件表集合!)
每個文件表的表項組成(針對我們的目的)包括有當前的文件位置、引用計數(referencecount) (即當前指向該表項的描述符表項數),以及一個指向v-node 表中對應表項的指針。關閉一個描述符會減少相應的文件表表項中的引用計數。內核不會刪除這個文件表表項,直到它的引用計數為零“文件表項”--file table entry的含義,從英文的名字可以更好的理解他的含義,即文件表入口或是文件表條目等!即使

"文件表項"實際上就是一張"文件信息表"。 非要找個實物來的話,看看上圖的"房產信息申請表"大概就知道了!就是列了很多項,在對應的項需要填寫對應的信息!那么文件表項中都有哪些信息呢??每個文件表項包含如下信息:
<1>.文件狀態標志( 讀,寫,追加,同步和非阻塞等 )
<2>.當前文件偏移量
<3>.指向該文件v節點表項的指針
畫成圖大概就是這個樣子!文件表項:即文件表表項,總結:


