2012-07-03 88 views
16

我有這樣的代碼:爲什麼在使用fprintf時打印到stdout不會發生?

#include <stdio.h> 
#include <unistd.h> 
int main() 
{ 
     while(1) 
     { 
       fprintf(stdout,"hello-out"); 
       fprintf(stderr,"hello-err"); 
       sleep(1); 
     } 
     return 0; 
} 

輸出是hello-errhello-errhello-errhello-errhello-errhello-err 以1秒的間隔。 我想知道爲什麼hello-out永遠不會被打印。

+2

非常明確的問題。 111111! – Linuxios

回答

15

您需要fflushstdout,因爲通常stdout是行緩衝的,並且您不會在程序中發出新的行字符。

  fprintf(stdout,"hello-out"); 
      fflush(stdout); 

stderr沒有完全默認情況下緩衝,所以你不需要fflush它。

2

默認情況下stdout是行緩衝的,這意味着緩衝區將在每行結束時刷新('\n')。 stderr是無障礙的,所以每個角色都會自動發送而不需要刷新。

您可以通過在stdout輸出的末尾放置一個\n來進行確認。這樣兩條線都將以1秒的間隔打印。

相關問題