標準i/o庫提供緩衝的目的是盡可能減少使用read和write呼叫的次數。它對每個io流自動的進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。不幸的是,標準io庫最令人迷惑的也是他的緩衝。
標準io提供了3種緩衝機制:
(1)全緩衝。這種情況下,在填滿標準io緩衝區後才進行實際io操作。對於駐留在磁碟檔案上的檔案通常是由標準io庫實現全緩衝的。在乙個流上執行第一次io操作時,相關標準io函式常呼叫malloc獲得需要使用的緩衝區。
術語flush說明標準io緩衝區的寫操作。緩衝區可由標準io例程自動flush(例如填滿乙個緩衝區時),或者可以呼叫函式fflush,flush乙個乙個流。值得注意的是在unix環境中,flush有兩種意思。在標準io庫方面,flush意味著將緩衝區中的內容寫到磁碟上。在終端驅動程式方面,flush表示丟棄已儲存在緩衝區中的資料。
(2)行緩衝。在這種情況下,當輸入和輸出中遇到換行符時,標準io庫執行io操作。這允許我們一次輸出乙個字元(fputc),但只有在謝了一行後才進行實際的io操作。當流操作涉及乙個終端時,通常使用行緩衝。
對於行緩衝有兩個限制。第一,因為標準io庫用來收集每一行的緩衝區的長度是固定的,所以只要填滿了緩衝區,那麼即使還沒有寫乙個換行符,也進行io操作。第二,任何時候只要通過標準io庫要求從(a)乙個不帶緩衝的流,或者(b)乙個行緩衝的流(它要求從核心的得到資料)得到輸入資料,那麼就會造成沖洗所有行緩衝輸出流。在(b)中帶了乙個在括號中的說明,其理由是,所需要的資料可能是已在該緩衝區中,它並不要求在需要資料時才從核心讀資料。很明顯,在從不帶緩衝的乙個流中進行輸入要求當事從核心得到資料。
(3)不帶緩衝。標準io庫不對字元進行緩衝儲存。例如,如果用標準io函式,fputs寫15個字元到不帶緩衝的乙個流中,則該函式很可能用write系統呼叫函式將這些字元立即寫到相關檔案中。
標準出錯流stderr通常是不帶緩衝的,這就使得出錯資訊盡快顯示出來。
iso c要求下列緩衝特徵:
不少系統預設的情況是:
評:
標準I O庫的緩衝機制
標準i o庫提供緩衝的目的是盡可能減少使用read和write呼叫的次數。它也對每個i o流自動地進行緩衝管理,從而避免了應用程式需要考慮這一點所帶來的麻煩。標準i o提供了三種型別的緩衝 1 全緩衝。這種情況下,在填滿標準i o緩衝區後才進行實際的i o操作。對於駐留在磁碟上的檔案通常是由標準i ...
標準I O緩衝
ansi c裡定義的標準i o是一種帶緩衝的高階磁碟i o,目的是盡可能減少使用read和write系統呼叫的次數,從而提高i o效率.標準i o提供了3種型別的緩衝型別.全緩衝.在這種情況下,當填滿標準i o快取後才進行實際i o操作.對駐留在磁碟上的檔案的訪問通常是由標準i o庫實施全緩衝的.行...
標準IO緩衝
一 問題描述 終端無輸出結果。二 分析問題 1.標準輸出 stdout 是行緩衝模式。其何時會輸出在於 printf裡有 n fflush stdout 或setbuf stdout,null 緩衝區已滿三種。在應用程式退出時 exit 會ffush緩衝區。2.上述程式,如果將sleep 1 usl...