在做linux有名管道問題時,想列印出read的資料
printf("received data %s",buf);結果執行後server始終
不能將獲取的資料列印出來。以為是寫資料的問題,跟蹤了一下
寫入和讀取都是成功的,後來想想有可能是緩衝區的原因
然後手動重新整理了一下緩衝區fflush(stdout);結果一切就正常了。
現在總結一下緩衝區重新整理的時機:
1. 使用fflush(stdout)強制重新整理。
2.緩衝區已滿。
3.scanf()要在緩衝區裡取資料時會先將緩衝區重新整理。
4.\n,\r進入緩衝區時。
5.執行緒結束的時候,如果該執行緒裡也有printf(....);
6. 程式結束時。
c語言坑之printf緩衝區
1 include 2 include 3 include 4 include 5 define maxstack 100 6int stack maxstack 2 7 int size 0 8 sem t sem 9 從檔案1.dat讀取資料,每讀一次,訊號量加一 10 void readdat...
printf緩衝區重新整理
printf之緩衝區小結 今天除錯程式,發現了乙個有趣的現象,printf函式沒有按照預期的結果輸出重複的字串,單步除錯顯示 的確走到了列印螢幕的分支,沒有顯示不由得想到了是不是緩衝區去重新整理的問題,在列印語句後加上換行符後得到解決。用printf 輸出時是先輸出到緩衝區,然後再從緩衝區送到螢幕上...
linux之printk和printf的區別
大部分常用的c庫函式在linux核心中都已經得到了實現。在所有沒有實現的函式中,最著名的就數printf 函式了。核心 雖然無法呼叫 printf 函式,但它可以呼叫printk 函式。printk 函式負責把格式化好的字串拷貝到核心日誌緩衝上,這樣syslog程式就可 以通過讀取該緩衝區來獲取核心...