任何一種作業系統中,程式在開始讀寫乙個檔案的內容之前,必須首先在程式與檔案之間建立連線或通訊通道,這一過程稱為開啟檔案。開啟乙個檔案的目的可以是為了讀或者為了寫,也可以是即讀又寫。
unix系統中有兩種機制用於描述程式與檔案的這種連線:
(1)檔案描述符
(2)流
檔案描述符 和 流 相同點:
1. 都是用來表示使用者程式與被操作的檔案之間的連線,並在此連線的 基礎上對檔案進行讀寫等訪問。
2. 都能表示與普通檔案,與裝置(如終端),與管道或者套接字的連線,使用者開啟乙個檔案,要麼返回檔案描述符,要麼返回乙個流。
3. 都包含了一大類的i/o庫函式
檔案描述符 和 流 不同點:
檔案描述符表示為int型別的物件。例如標準輸入對應檔案描述符0,標準輸出對應檔案描述符1。
而流則表示為指向結構file的指標file* ,因此流也稱為「檔案指標」
如果需要對特定裝置進行控制操作,必須使用檔案描述符方式,沒有函式能對流進行這類操作。
如果需要按照特殊的方式進行i/o操作(例如非阻塞的方式),必須使用檔案描述符方式,也沒有函式能對流進行這類操作。
檔案描述符 和 流的關係:
流給使用者程式提供了更高一級的(功能更強大,使用更簡化)的i/o介面,它處在檔案描述符方式的上層,也就是說,流函式是通過檔案描述符函式來實現的。
流 相對於 檔案描述符的優點:
執行實際輸入輸出操作的流函式集合比檔案描述符函式要豐富很多,而功能也靈活,強大不少。
檔案描述符函式只提供簡單的傳送字元塊的函式
流函式提供格式化i/o,字元i/o,面向行的i/o等大量函式
流函式有利於程式的移植,任何基於ansi c的系統都支援流,檔案描述符的支援則較弱
檔案描述符 和 流的關係
任何一種作業系統中,程式在開始讀寫乙個檔案的內容之前,必須首先在程式與檔案之間建立連線或通訊通道,這一過程稱為開啟檔案。開啟乙個檔案的目的可以是為了讀或者為了寫,也可以是即讀又寫。unix系統中有兩種機制用於描述程式與檔案的這種連線 1 檔案描述符 2 流 檔案描述符 和 流 相同點 1.都是用來表...
檔案流和 檔案描述符
include apue.h int glob 6 int main void else if pid 0 i printf pid d,glob d,var d n getpid glob,var sprintf buf,d n i write stdout fileno,buf,strlen b...
檔案流和檔案描述符
檔案流和檔案描述符 檔案流和 檔案描述符 2011 10 19 16 08 apue 中的一道課後題 習題8.1 include apue.h int glob 6 int main void else if pid 0 i printf pid d,glob d,var d n getpid gl...