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指精度。用於說明...