您的位置:首頁>正文

Linux 檔描述符 與 流

任何一種作業系統中, 程式在開始讀寫一個檔的內容之前, 必須首先在程式與檔之間建立連接或通信通道, 這一過程稱為打開檔。 打開一個檔的目的可以是為了讀或者為了寫, 也可以是即讀又寫。

UNIX系統中有兩種機制用於描述程式與檔的這種連接:

檔描述符

檔描述符 和 流:相同點:

都是用來表示使用者程式與被操作的檔之間的連接, 並在此連接的 基礎上對檔進行讀寫等訪問。

都能表示與普通檔, 與設備(如終端), 與管道或者通訊端的連接, 用戶打開一個檔, 要麼返回檔描述符, 要麼返回一個流。

都包含了一大類的I/O庫函數

檔描述符 和 流:不同點:

檔描述符表示為int類型的物件。 例如標準輸入對應檔描述符0, 標準輸出對應檔描述符1。

而流則表示為指向結構FILE的指標FILE* , 因此流也稱為“檔指標”

如果需要對特定設備進行控制操作, 必須使用檔描述符方式, 沒有函數能對流進行這類操作。

如果需要按照特殊的方式進行I/O操作(例如非阻塞的方式), 必須使用檔描述符方式, 也沒有函數能對流進行這類操作。

檔描述符 和 流的關係:

流給使用者程式提供了更高一級的(功能更強大, 使用更簡化)的I/O介面, 它處在檔描述符方式的上層, 也就是說, 流函數是通過檔描述符函數來實現的。

流 相對於 檔描述符 的 優點:

執行實際輸入輸出操作的流函數集合比檔描述符函數要豐富很多,

而功能也靈活, 強大不少。

檔描述符函數只提供簡單的傳送字元塊的函數

流函數提供格式化I/O, 字元I/O,面向行的I/O等大量函數

流函數有利於程式的移植, 任何基於ANSI C的系統都支援流, 檔描述符的支援則較弱

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示