Linux之printf的緩衝區問題

2021-06-19 03:11:11 字數 385 閱讀 4953

在做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程式就可 以通過讀取該緩衝區來獲取核心...