C - fork和printf行为

时间:2014-09-25 07:50:11

标签: c linux fork

结合printf测试fork函数我发现了一些奇怪的行为

例如,代码:

int main(){
     if(fork()==0){
          printf("TestString");
     }
}

不打印任何内容,而

int main(){
  if(fork()==0) {
     printf("TestString\n");
  }
}

正确打印出TestString。为什么打印新行会改变行为?我怀疑它可能与fflush()有关,但我不确定。我可以获得解释或链接,我可以阅读它吗?谢谢你提前回答。

编辑:我正在寻找的解释是什么实际上正在冲洗,为什么和冲洗相同。

1 个答案:

答案 0 :(得分:0)

在Linux(至少)上,stdout 行缓冲。这意味着,在遇到'\n'之前,您写入的任何内容都不会真正显示在屏幕上。如果您不喜欢这种行为,您可以使用setbuf()更改缓冲策略,但是您必须在程序启动后立即执行此操作(实际上,在对流进行任何写入之前)或调用正如你所说,只要你想刷新缓冲区内容,就fflush()

请记住,当程序结束并且其打开的流自动关闭时,缓冲区也会被刷新。