为什么这段代码打印两次?

时间:2012-03-06 10:27:57

标签: c fork newline printf stdio

  

可能重复:
  Working of fork() in linux gcc

#include <stdio.h>

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

我对C优化有一些想法,但我不确定。希望你知道答案。

2 个答案:

答案 0 :(得分:14)

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

与优化无关。

答案 1 :(得分:4)

当调用fork()时,父进程和子进程都继承它,因此它们都将

在刷新缓冲区时打印出“ciao”。如果你打电话给fflush(stdout);

在调用fork之前它只打印一次