Почему этот код печатается два раза? [дубликат]

Возможные Дубликаты:
работа fork () в linux gcc

#include <stdio.h>

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

у меня есть некоторые идеи по оптимизации C, но я не уверен. Надеюсь, ты знаешь ответ.

2 ответов


код, вероятно, напечатает "ciao" дважды стандартный вывод буферизуется IO, поэтому внутренний буфер для стандартного вывода будет реплицирован в дочернем процессе, и оба буфера будут сброшены при выходе каждого процесса, родительского и дочернего.

это не связано с оптимизацией.


когда fork() вызывается, как родительский, так и дочерний процесс наследуют его, и поэтому они оба будут

распечатайте "ciao", когда они очистят буфер. Если вы вызываете fflush (stdout);

перед вызовом fork он будет печатать только один раз