關於linux下printf函式輸出不及時的解決

2021-08-26 03:01:30 字數 1275 閱讀 2092

在linux系統下,printf函式是行緩衝式的輸出,當printf遇到\n時,或者緩衝區滿時,才會將緩衝區裡的內容重新整理到標準輸出(stdout).

因此, printf("p"); 等語句的顯示不能立刻顯示在螢幕上,但是printf("p\n"); 可以.

為了解決這個問題可以通過:fflush(stdout);解決,即變成:

printf("p");

fflush(stdout);

問題可以得到解決.

相對printf,使用fprintf的好處

printf函式的介面如下所示:

int printf( const char*format

[,argument

]...);

fprintf函式的介面如下所示:

int fprintf( file*stream

,const char*format

[, argument

]...);

從介面可以看出,使用printf函式會更方便些,少了乙個函式引數。在通常情況下,的確是這樣的。但在輸出資訊比較多,而且輸出的資訊有可能需要分類的化,使用fprintf的好處就體現出來了。

printf函式使用的輸出裝置是標準輸出裝置,即stdout。在使用fprintf函式時,我們可以在第乙個引數使用stdout或stderr進行輸出資訊分類。雖然stdout和stderr在正常情況下都指向標準輸出裝置,但通常程式執行時的命令列引數,可以分別控制stdout和stderr指向不同的裝置或檔案。這樣,就可以達到對輸出資訊進行分類控制了。如下面的**段所示:

test.c

//一般輸出資訊

extern char *info;

extern char *errinfo;

fprintf(stdout, "%s", info);

//特別關注的輸出資訊

fprintf(stderr, "%s", errinfo);

這樣,在執行程式時,可以使用如下的命令列:

test 1&>1.txt 2&>2.txt

這樣,一般輸出資訊可以儲存到1.txt檔案中,特別關注的輸出資訊可以儲存到2.txt檔案中。

MDK環境下stm32實現printf函式

printf雖然是c語言的標準函式,但是是針對有stdin,stdout裝置的系統的,在嵌入式平台上是沒有標準的stdin,stdout的,需要對映到串列埠後某個輸出物件的,而嵌入式平台各不相同,如果又沒有作業系統的支援,就只能靠自己實現了,因此stm32下的printf不在標準庫里,而在定製的庫里...

關於printf 詳解

格式化輸出,即 print format 標頭檔案 也可不用標頭檔案 語法格式 printf 格式控制字串 輸出表列 格式字串格式 標誌 輸出最少寬度 精度 長度 型別 d 以十進位制形式輸出帶符號得整數,正數不輸出符號 i 輸出有符號十進位制整數,效果同 d u 輸出無符號十進位制整數 o o 輸...

總結linux下printf命令的用法

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