printf之緩沖區小結:
今天調試程式,發現了一個有趣的現象,printf函數沒有按照預期的結果輸出重複的字元串,單步調試顯示代碼的确走到了列印螢幕的分支,沒有顯示不由得想到了是不是緩沖區去重新整理的問題,在列印語句後加上換行符後得到解決。
用printf()輸出時是先輸出到緩沖區,然後再從緩沖區送到螢幕上。linux下緩沖區重新整理到螢幕這一步一般可以通過一下方式觸發:
1使用fflush(stdout)強制重新整理标準輸出緩沖區。
2.緩沖區已滿。
3.scanf()要在緩沖區裡取資料時會先将緩沖區重新整理。
4.\n進入緩沖區時。
5. 程式結束時。
在小結下緩沖區的類型:
全緩沖:linux下預設為8192位元組,在緩沖區滿或者顯示調用重新整理函數後進行IO系統調用操作,普通磁盤檔案通常使用全緩沖區通路。
行緩沖區:預設大小為128位元組,當在遇到換行符或者緩沖區滿時,标準IO庫執行IO系統調用操作,終端即行緩沖區。
非緩沖區:标準IO庫不對字元進行緩存,标準出錯流stderr通常是不帶緩沖區的。