
第二章
檔案 I/O
本章及後續三章將會探討檔案。因為 Unix 系統上的一切皆以檔案呈現,所以本書將以
這幾章的內容來探討 Unix 系統的關鍵議題。本章將說明檔案 I/O(輸出入)的基礎知
識,它詳述了與檔案互動時所使用之最簡單及最常見的系統呼叫。第 3 章將說明標準 C
程式庫所提供的標準 I/O 功能,並於第 4 章說明更進階和特別的 I/O 介面。最後以第 8
章所介紹的檔案和目錄操作,為 I/O 的探討劃下完美的句點。
檔案必須先被開啟,才可以對它進行讀取或寫入的操作。核心會替每個行程維護一份已
開啟檔案的清單,稱為
檔案表
(
file table
)。此表係經由非負整數進行索引,此非負整數
稱為
檔案描述器
(
file descriptor
,常簡寫為
fd
)。此表中每個項目內含與已開啟檔案相
關的資訊,包括一個指標(指向檔案之 inode 於記憶體中的副本)以及相關的中介資料
(例如檔案位置與存取模式)。用戶空間與核心空間都會把「檔案描述器」當成獨一無
二的「每行程識別符」(per-process cookies)
1
:開啟一個檔案便會傳回一個「檔案描述
器」,而隨後的操作(讀取、寫入…等等)則會以「檔案描述器」做為主要的引數。
「檔案描述器」會被表示成 C 語言的
int
資料型別。而不使用以往 Unix 所使用的特殊
資料型別。每個 Linux 行程所能開啟的檔案數目都具有上限值。「檔案描述器」從 0 開
始起算,可以一直成長到比上限值少 1 的數目。預定狀況下,上限值為 1,024,但是最
高可設定到 1,048,576 ...