C – fork和printf行为

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

例如,代码:

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

不打印任何东西,而

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

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

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

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

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