對于標準I/O庫,它們的操作是圍繞流(stream)進行的。當用標準I/O庫打開或創建一個文件時,我們已使一個流與一個文件相關聯。
對于ASCII字符集,一個字符用一個字節表示。對于國際字符集,一個字符可以用多個字節表示。標準I/O文件流可用于單字節或多字節(“寬”)字符集。流的定向(stream’s orientation)決定了所讀、寫的字符是單字節還是多字節。當一個流最初被創建時,它并沒有定向。如若在未定向的流上使用一個多字節I/O函數(見<wchar.h>),則將該流的定向設置為寬定向的。若在未定向的流上使用一個單字節I/O函數,則將該流的定向設置為字節定向的。只有兩個函數可以改變流的定向。freopen函數清除一個流的定向;fwide函數設置流的定向。
#include <stdio.h>#include <wchar.h>int fwide( FILE *fp, int mode );返回值:若流是寬定向的則返回正值,若流是字節定向的則返回負值,若流是未定向的則返回0
根據mode參數的不同值,fwide函數執行不同的工作:
注意,fwide并不改變已定向流的定向。還應注意的是,fwide無出錯返回。試想如若流是無效的,那么將發生什么呢?我們唯一可依靠的是,在調用fwide前先清除errno,從fwide返回時檢查errno的值。
當打開一個流時,標準I/O函數fopen返回一個指向FILE對象的指針。該對象通常是一個結構,它包含了標準I/O庫為管理該流所需要的所有信息,包括:用于實際I/O的文件描述符、指向用于該流緩沖區的指針、緩沖區的長度、當前在緩沖區中的字符數以及出錯標志等等。
應用程序沒有必要檢驗FILE對象。為了引用一個流,需要將FILE指針作為參數傳遞給每個標準I/O函數。通常,我們稱指向FILE對象的指針(類型為FILE *)為文件指針。
本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/。
新聞熱點
疑難解答