流和file物件
對於標準i/o庫,他們的操作時圍繞流進行的,當標準i/o庫開啟或者建立乙個檔案時,我們使用乙個流和乙個檔案相關聯
對於ascii字符集,乙個字元用乙個位元組表示,對於標準字付集,乙個字元可用多個位元組表示。標準i/o檔案流可用於單位元組或多位元組集。流的定向決定了讀、寫的字元是單位元組還是多位元組。可用fwide函式設定流的定向:
#include
#include
int fwide(file* fp, int mode);//返回值:若流是寬定向的則返回正值,位元組定向的則返回負值,若流是未定向的則返回0
緩衝:標準i/o庫提供緩衝的目的是盡可能減少使用read和write呼叫的次數。他對於每個i/o流進行緩衝慣例。
標準i/o提供了三種緩衝:
1)全緩衝:這種情況下在填滿標準i/o緩衝時才進行實際的i/o操作。
術語沖洗flush說明標準i/o緩衝區的寫操作。可呼叫fflush沖洗乙個流。
2)行緩衝,這種情況下在輸入和輸出中遇到換行符時,標準庫執行i/o操作。當流涉及到乙個終端時,通常使用行緩衝。
行緩衝有兩個限制:一:因為標準i/o庫用於每一行的緩衝區的長度是固定的,所以只要填滿了緩衝區,也進行i/o操作,第二,任何時候只要通過標準i/o庫要求從乙個不帶緩衝的流,或者乙個行緩衝的流中得倒資料,就會造成沖洗航緩衝輸出流。
3)不帶緩衝,標準i/o庫不對字元進行緩衝儲存。
當且僅當標準輸入和標準輸出不涉及互動式裝置時,他們才是全緩衝。常用是行緩衝
標準出錯流不適用全緩衝,常用無緩衝
可呼叫下列函式更改緩衝型別
#include
void setbuf(file* restrict fp, char* restrict buf);//開啟或關閉緩衝機制,buf指向乙個bufsize的緩衝區,通常是全緩衝,除非該流與乙個終端裝置相關
int setvbuf(file *restrict fp, char* restrict buf, int mode), size_t size;//mode引數 _iofbf(全緩衝),_iolbf(行緩衝), _ionbf(不帶緩衝)
這些函式應該在流開啟後呼叫,並且也應該對流任何乙個操作之前呼叫
開啟流:
#include
file* fopen(const char* restrict pathname, const char*restrict typr);
file* freopen(const char* restrict pathname, const char* restrict type, file* restrict fp);
file* fdopen(int filedes, const char* type);
freopen通常用於在乙個指定流上開啟乙個指定的檔案,若流已經開啟,則先關閉該流。若流已經重定向,則freopen清除該定向。此函式一般用於講乙個指定的檔案開啟為乙個預定義的流:標準輸入、標準輸出、或者標準錯誤
fdopen獲取乙個現有的檔案描述符(可用是open,dup,dup2,fcnt1,pipe,socket,socketpair,或accept函式得到的檔案描述符),並是乙個標準i/o流與該描述符相結合。此函式用於建立管道和網路函式返回的描述符。
type引數指定該i/o流的讀寫方式。
當用新增型別開啟乙個檔案後,則每次寫都將資料寫到檔案的當前尾端處,如若有多個程序將標準i/o添些方式開啟同一檔案,那麼來自每個程序的資料都將正確的攜帶哦啊檔案中。
Unix學習筆記 標準I O庫
流和file物件 對於標準i o庫,他們的操作時圍繞流進行的,當標準i o庫開啟或者建立乙個檔案時,我們使用乙個流和乙個檔案相關聯 對於ascii字符集,乙個字元用乙個位元組表示,對於標準字付集,乙個字元可用多個位元組表示。標準i o檔案流可用於單位元組或多位元組集。流的定向決定了讀 寫的字元是單位...
UNIX環境程式設計學習 標準IO庫
在檔案io中,所有的函式都是使用檔案描述符作為讀寫的物件。但在標準i o庫中,函式的操作物件是乙個流 stream 當用標準i o庫開啟乙個檔案時,就會使乙個stream與該檔案繫結。流的定向 流的定向可以看作是流的乙個屬性。它決定了流所進行的讀取或寫入操作是單位元組還是多位元組 在國際字符集中乙個...
UNIX環境高階程式設計學習筆記三 標準I O庫的介紹
include include intfwid file fp,int mode 指定流寬頻 void setbuf file restrict fp,char restrict buf 開啟或關閉緩衝機制 void setvbuf file restrict fp,char restrict bu...