最近在閱讀linux0.11原始碼,看到了檔案系統,覺得檔案描述符表和檔案表項以及v節點表項概念有點混淆,於是翻了翻了萬能的apue和unix/linux程式設計實踐,現在差不多弄懂了,就寫篇博文分享給大家。
以前只知道檔案描述符只是乙個索引,指向了pcb中的struct file *filp
,即檔案描述符表,但是後面的就不知道了。今天終於明白了之後的內容了,原來檔案描述符只是結構體陣列的下標。。。。先放出apue書中的一張圖,可以直觀地理解這三者的關係。
可以看到檔案描述符表中每一項包含了檔案描述符標誌和指向乙個檔案表項的指標還有其它東西,這個指標就指向了乙個檔案表項。而每個程序中都有乙個檔案描述符表,但是檔案表卻是唯一的,裡面包含了各個檔案表項,每項中包含已經開啟的檔案的各種狀態以及當前檔案偏移量還有指向該檔案v節點表項的指標,而程序都有自己對應的檔案表項(因為開啟的檔案各不相同)。
對應每個檔案表項,都有乙個v-node結構,裡面包含了檔案型別和對此檔案進行各種操作函式的指標等。
現在應該大致理解了這三者的關係了,但是當我們在不同程序開啟同一檔案時這三者的聯絡怎麼樣呢?結果如圖:
可以看到檔案表項中的v節點指標都指向了同乙個v節點表項,但是檔案指標卻沒有指向同一項檔案表項。這是因為,檔案表項中儲存的是每乙個開啟了的檔案的資訊,也就是說,同乙個檔案可能在檔案表項中出現多次。還有就是檔案表項中的當前檔案偏移量是指下一次讀寫檔案時從檔案開頭到讀寫位置的偏移。
程序表項 檔案表項 V節點總結
核心使用3鐘資料結構表示開啟檔案,它們之間的關係決定了在檔案共享方面乙個程序對另乙個程序可能產生的影響。a 檔案描述符標誌。b 指向乙個檔案表項的指標。2 核心為所有開啟的檔案維持一張檔案表 同乙個檔案可以被開啟多次,所以同乙個檔案可以在檔案表中占有多項 每個檔案表項包含 a 檔案狀態標誌 讀 寫 ...
程序表項 檔案表項 V節點總結
核心使用3鐘資料結構表示開啟檔案,它們之間的關係決定了在檔案共享方面乙個程序對另乙個程序可能產生的影響。a 檔案描述符標誌。b 指向乙個檔案表項的指標。2 核心為所有開啟的檔案維持一張檔案表 同乙個檔案可以被開啟多次,所以同乙個檔案可以在檔案表中占有多項 每個檔案表項包含 a 檔案狀態標誌 讀 寫 ...
mysql 檔案描述符 檔案描述符
toc 首先,linux的世界裡一切皆為檔案,無論是裝置還是乙個socket連線。檔案又可分為 普通檔案 目錄檔案 鏈結檔案和裝置檔案。檔案描述符 file descriptor 是核心為了高效管理已被開啟的檔案所建立的索引,其是乙個非負整數 通常是小整數 用於指代被開啟的檔案,所有執行i o操作的...