2012-03-06 209 views
6

可能重复:
Working of fork() in linux gcc为什么此代码打印两次?

#include <stdio.h> 

void main() 
{ 
    printf ("ciao"); 
    fork(); 
} 

我有关于C优化的一些想法,但我不知道。希望你知道答案。

+4

您是否试过运行它? – MByD 2012-03-06 10:29:05

+2

我不太清楚我是否理解这个问题。这是非常明显的打印。另外,main应该返回一个int,fork()所做的功能还不清楚:) – 2012-03-06 10:29:38

+0

是的,它打印出“ciaociao”。我的问题是关于它为什么打印这个。 – gc5 2012-03-06 10:30:03

回答

14

代码可能会打印"ciao"两次,因为标准输出是缓冲IO,因此标准输出的内部缓冲区将在子进程中复制,并且在每个进程(父进程和子进程)退出时刷新两个缓冲区。

这与优化无关。

4

当叉()被调用时,父级和子进程继承它,因此,它们两者都将

打印出“侨”,当他们刷新缓冲区。如果你调用fflush(stdout);

打电话前它只会打印一次