我有这段代码:
#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秒。
我想知道为什么你永远不会被打印出来。
答案 0 :(得分:15)
您需要fflush
stdout
,因为通常stdout
是行缓冲的,并且您不会在程序中发出换行符。
fprintf(stdout,"hello-out");
fflush(stdout);
stderr
默认情况下未完全缓冲,因此您无需fflush
。
答案 1 :(得分:2)
stdout是行缓冲的,这意味着缓冲区将在每个行尾('\n
')刷新。
stderr是不受保护的,因此每个角色都会自动发送而无需刷新。
您可以通过在stdout输出的末尾放置\n
来确认这一点。这样两条线将以1秒的间隔打印。