linux系統(tǒng)下一切皆文件,通過虛擬文件系統(tǒng)(VFS)的機制將所有底層屏蔽掉,用戶可以通過統(tǒng)一的接口來實現(xiàn)對不同驅(qū)動的操作,對于每一個文件需要一個引用來指示,此時文件描述符應用而生,文件描述符類似于widows下的handle,對于文件的大部分操作都是通過這個描述符來操作的,例如read,write。對于每一個文件描述符,內(nèi)核使用三種數(shù)據(jù)結(jié)構(gòu)來管理。

(1)  每個進程在進程表中都有一個記錄項,每個記錄項中有一張打開文件描述符表,可將其視為一個矢量,每個描述符占用一項。與每個文件描述符相關聯(lián)的是:

  (a)  文件描述符標志。 (當前只定義了一個文件描述符標志FD_CLOEXEC)

  (b)  指向一個文件表項的指針。

(2)  內(nèi)核為所有打開文件維持一張文件表。每個文件表項包含:

  (a)  文件狀態(tài)標志(讀、寫、增寫、同步、非阻塞等 )。

  (b)  當前文件位移量。(即為lseek函數(shù)所操作的值)

  (c)  指向該文件v節(jié)點表項的指針。

(3)  每個打開文件(或設備)都有一個 v 節(jié)點結(jié)構(gòu)。 v節(jié)點包含了文件類型和對此文件進行各種操作的函數(shù)的指針信息。對于大多數(shù)文件, v 節(jié)點還包含了該文件的 i 節(jié)點(索引節(jié)點)。這些信息是在打開文件時從盤上讀入內(nèi)存的,所以所有關于文件的信息都是快速可供使用的。例如, i 節(jié)點包含了文件的所有者、文件長度、文件所在的設備、指向文件在盤上所使用的實際數(shù)據(jù)塊的指針等等點。

 photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓

  經(jīng)過上述文件系統(tǒng)的三層封裝,每層負責不同的職責,從上到下第一層用于標識文件,第二層用于管理進程獨立數(shù)據(jù),第三層管理文件系統(tǒng)元數(shù)據(jù),直接關聯(lián)一個文件。這種分層思想的一個優(yōu)點就是上層可以復用下層的結(jié)構(gòu)??赡苡卸鄠€文件描述符項指向同一個文件表項,也可以有多個文件表項指向同一個V節(jié)點。

  如果兩個獨立的進程打開了同一個文件,打開此文件的每個進程都得到一個文件表項,但是兩個文件表項的V節(jié)點指針指向相同的V節(jié)點,這樣的安排使得每個進程都有他自己的對該文件的當前位移量,且支持不同的打開方式(O_RDONLY, O_WRONLY, ORDWR)。

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式