天天看點

printf緩沖區重新整理

printf之緩沖區小結:

    今天調試程式,發現了一個有趣的現象,printf函數沒有按照預期的結果輸出重複的字元串,單步調試顯示代碼的确走到了列印螢幕的分支,沒有顯示不由得想到了是不是緩沖區去重新整理的問題,在列印語句後加上換行符後得到解決。

    用printf()輸出時是先輸出到緩沖區,然後再從緩沖區送到螢幕上。linux下緩沖區重新整理到螢幕這一步一般可以通過一下方式觸發:

1使用fflush(stdout)強制重新整理标準輸出緩沖區。

2.緩沖區已滿。

3.scanf()要在緩沖區裡取資料時會先将緩沖區重新整理。

4.\n進入緩沖區時。

5. 程式結束時。

    在小結下緩沖區的類型:

全緩沖:linux下預設為8192位元組,在緩沖區滿或者顯示調用重新整理函數後進行IO系統調用操作,普通磁盤檔案通常使用全緩沖區通路。

行緩沖區:預設大小為128位元組,當在遇到換行符或者緩沖區滿時,标準IO庫執行IO系統調用操作,終端即行緩沖區。

非緩沖區:标準IO庫不對字元進行緩存,标準出錯流stderr通常是不帶緩沖區的。

繼續閱讀