2012-07-03 91 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秒的间隔打印。

相关问题