Почему этот код печатается два раза?

Возможный дубликат:
Работа fork() в Linux gcc

#include <stdio.h>

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

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


person gc5    schedule 06.03.2012    source источник
comment
Я не совсем уверен, что понимаю вопрос. Совершенно очевидно, что он печатает. Кроме того, main должен возвращать int, а что делает функция fork(), непонятно :)   -  person John Snow    schedule 06.03.2012
comment
Да, он печатает ciaociao. Мой вопрос о том, почему он печатает это.   -  person gc5    schedule 06.03.2012
comment
Я думаю, что я изменю название вопроса   -  person gc5    schedule 06.03.2012
comment
Извините, не нашел :(   -  person gc5    schedule 06.03.2012
comment
Код вызывает UB -- 1: void main(); 2: нет прототипа для fork();   -  person pmg    schedule 06.03.2012


Ответы (2)


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

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

person hmjd    schedule 06.03.2012

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

распечатать «чао», когда они очищают буфер. Если вы вызываете fflush(stdout);

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

person karthik gorijavolu    schedule 06.03.2012