结合printf测试fork函数我发现了一些奇怪的行为
例如,代码:
int main(){
if(fork()==0){
printf("TestString");
}
}
不打印任何内容,而
int main(){
if(fork()==0) {
printf("TestString\n");
}
}
正确打印出TestString。为什么打印新行会改变行为?我怀疑它可能与fflush()有关,但我不确定。我可以获得解释或链接,我可以阅读它吗?谢谢你提前回答。
编辑:我正在寻找的解释是什么实际上正在冲洗,为什么和冲洗相同。
答案 0 :(得分:0)
在Linux(至少)上,stdout
行缓冲。这意味着,在遇到'\n'
之前,您写入的任何内容都不会真正显示在屏幕上。如果您不喜欢这种行为,您可以使用setbuf()
更改缓冲策略,但是您必须在程序启动后立即执行此操作(实际上,在对流进行任何写入之前)或调用正如你所说,只要你想刷新缓冲区内容,就fflush()
。
请记住,当程序结束并且其打开的流自动关闭时,缓冲区也会被刷新。