Linux-task_struct和檔案系統及管道的關係

weixin_33982670發表於2018-05-24

  推薦:檔案描述符和檔案指標的關係

  fs_struct 記錄該程式所在檔案系統等資訊。

  files_struct 記錄該程式當前開啟的所有檔案等資訊,其中有一個元素為陣列,陣列索引是檔案描述符,陣列元素(FILE *型別)指向了 file 物件。由此可知兩個檔案描述符可以指向同一 file 物件,即使不在同一程式。

  file 為 FILE 物件,可以在 include/linux/fs.h 中檢視。

結合以上知識來圖

 

  程式與管道的介面和程式與檔案的介面是一致的。不同的是,在實現上,核心將讀寫的偏移量放在索引節點中而不是檔案表中。

  建立無名管道函式 pipe 一次呼叫返回兩個檔案描述符,並且核心也會從檔案表中找到兩個空閒表項及一個記憶體 inode 索引節點,檔案描述符和檔案表一一對應,而兩個檔案表則對應同一個 inode,執行一個檔案表的許可權為讀,一個檔案表的許可權為寫。inode 的引用數設定為 2。管道儲存資料的緩衝區會由核心從記憶體中分配出一頁大小的記憶體來作為管道實現資料的讀與寫

相關文章