#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-out”,为什么?
答案 0 :(得分:3)
您可以尝试使用
setbuf(stdout, NULL);
停止缓冲stdout
,否则你可以像这样冲洗:
fprintf(stdout,"hello-out");
fflush(stdout);
fprintf (stderr, "hello-err");
来自C 11标准§7.21.5.2第2部分:
如果stream指向输出流... fflush函数会导致 该流的任何未写入数据......写入文件; 否则,行为未定义。
答案 1 :(得分:2)
您可以在每个\n
来电的最后添加fprintf ()
,但您可能正在寻找fflush (stdout)
。顾名思义,您可以使用它来刷新输出缓冲区。
像这样...
#include <stdio.h>
#include <unistd.h>
int
main (void)
{
while (1) {
fprintf (stdout, "hello-out");
fflush (stdout);
fprintf (stderr, "hello-err");
sleep (1);
}
return 0;
}