请有人解释一下这段代码是如何工作的吗?
int main()
{
printf("Hello");
fork();
printf("World");
}
打印:
HelloWorldHelloWorld
我的确切问题是,为什么hello
会被打印两次。是先打印hello
,然后执行fork()
?
此外,有时会打印:
HelloWorld
// then the reports....process exited with return value 0..etc etc.. then...//
HelloWorld
为何输出?
答案 0 :(得分:18)
原因是:缓冲输出。 "你好"当你执行fork时,它在缓冲区中但尚未被释放,因此forked进程以相同的缓冲区开始,包括相同的单词" Hello"。然后,父母和孩子输出"世界"所以总输出是" HelloWorld"对于他们两个。
答案 1 :(得分:4)
添加到@ammoQ答案:
int main()
{
printf("Hello");
fflush(stdout);
fork();
printf("World");
}
会让你达到预期的效果。
答案 2 :(得分:3)
Fork创建了该进程的副本。并且当fork发生时可以缓冲printf(),这个缓冲区将被复制。
这里非常可靠的解释: fork() branches more than expected?