linux下printf中 n的重要作用

2021-07-24 04:43:20 字數 656 閱讀 7797

linux下printf中\n的重要作用

今天遇到乙個很有趣的問題:

我用的是linux 2.6.11

程式大概是這樣的(引數不詳寫了):

...printf("abc");

listen(...);

accept(...);

...程式死活打不出"abc"來.用gdb檢視,程式又確實是執行到了accept這裡.

有大蝦告訴我:在abc末尾加\n試試.

加了以後,abc就打出來了.

後來又試了類似的:

printf("abc");

recvfrom(...);

程式一樣打不出abc來,

printf("abc\n");

recvfrom(...);

abc就打出來了.

大蝦說linux下printf是以"行"來做緩衝區來重新整理stdout的,如果遇到\n會強制立即重新整理.否則重新整理可能會延遲.因為printf中沒有包含\n,核心決定滿一行再重新整理,而此時程式由於呼叫accept或recvfrom這類會block的api函式,造成螢幕一直顯示不出來,除非收到了tcp連線請求或資料報,系統才會重新決定是否重新整理螢幕.

看來小小的\n還是蠻重要的.

此問題可以在<多了解了解檔案i/o還是很有必要的.

printf 中 n格式說明符

一 遇到 n 昨天在寫scanf 的輸入異常處理時遇到了乙個從未見過的格式說明符 n sscanf str,d n v,c 從執行結果來看,c的值是str的長度。二 stack overflow 上關於 n 的qa 於是我在stack overflow上找到了關於這個格式說明符的qa。what is...

總結linux下printf命令的用法

printf format and print date 通過printf的選項格式化輸出資料 參考 基本英文學習 二進位制 binanry number 八進位制 otcal number 十進位制 decimal number 十六進製制 hexadecimal number 1 基本的列印輸出...

Linux中的格式輸出 Printf用法

printf的格式控制的完整格式 0 m.n l或h 格式字元 下面對組成格式說明的各項加以說明 表示格式說明的起始符號,不可缺少。有 表示左對齊輸出,如省略表示右對齊輸出。0 有0表示指定空位填0,如省略表示指定空位不填。m.n m指域寬,即對應的輸出項在輸出裝置上所佔的字元數。n指精度。用於說明...