UNIX系統中有兩種機制用於描述程式與檔的這種連接:
檔描述符
流
檔描述符 和 流:相同點:都是用來表示使用者程式與被操作的檔之間的連接, 並在此連接的 基礎上對檔進行讀寫等訪問。
都能表示與普通檔, 與設備(如終端), 與管道或者通訊端的連接, 用戶打開一個檔, 要麼返回檔描述符, 要麼返回一個流。
都包含了一大類的I/O庫函數
檔描述符 和 流:不同點:檔描述符表示為int類型的物件。 例如標準輸入對應檔描述符0, 標準輸出對應檔描述符1。
而流則表示為指向結構FILE的指標FILE* , 因此流也稱為“檔指標”
如果需要對特定設備進行控制操作, 必須使用檔描述符方式, 沒有函數能對流進行這類操作。
如果需要按照特殊的方式進行I/O操作(例如非阻塞的方式), 必須使用檔描述符方式, 也沒有函數能對流進行這類操作。
檔描述符 和 流的關係:流給使用者程式提供了更高一級的(功能更強大, 使用更簡化)的I/O介面, 它處在檔描述符方式的上層, 也就是說, 流函數是通過檔描述符函數來實現的。
流 相對於 檔描述符 的 優點:執行實際輸入輸出操作的流函數集合比檔描述符函數要豐富很多,
檔描述符函數只提供簡單的傳送字元塊的函數
流函數提供格式化I/O, 字元I/O,面向行的I/O等大量函數
流函數有利於程式的移植, 任何基於ANSI C的系統都支援流, 檔描述符的支援則較弱