预测输出出错了! - 使用“fprintf& stdout”时发生了什么

时间:2015-09-08 11:22:20

标签: c stdout stderr

  #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”,为什么?

2 个答案:

答案 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;
}