我有这个代码:
#include <stdio.h>
#include <unistd.h>
int main()
{
while(1)
{
fprintf(stdout,"hello-out");
fprintf(stderr,"hello-err");
sleep(1);
}
return 0;
}
输出为hello-err
hello-err
hello-err
hello-err
hello-err
hello-err
以 1 秒的间隔。我想知道为什么 hello-out 永远不会被打印出来。
您需要
fflush
stdout
,因为通常stdout
是行缓冲的,并且您不会在程序中发出新的行字符。
fprintf(stdout,"hello-out");
fflush(stdout);
默认情况下,stderr
未完全缓冲,因此无需fflush
它。
stdout 默认是行缓冲的,这意味着缓冲区将在行尾的每个末尾刷新 ( 'n
')。STDERR 是无封的,因此每个字符都会自动发送,无需刷新。
您可以通过在标准输出输出的末尾放置一个n
来确认这一点。这样,两行将以 1 秒的间隔打印。