использование fork () не дает правильного вывода - PullRequest
0 голосов
/ 11 мая 2011

Я использую следующий код для выполнения форка

#include <stdio.h>
#include <sys/types.h>

int main()
{
    int pid;
    pid=fork();
    if(pid==0)
    {
        printf("\n child 1");
        pid=fork();
        if (pid==0)
           printf("\n child 2");
    }
    return 0;
}

Предполагаемый вывод должен быть child1 child2

Вместо этого я получаю

child1 child2 child1

Не могу понять поведение вилки

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Если вы записали данные в любой stdio FILE до вызова fork и намереваетесь использовать тот же FILE после fork, вы должны вызвать fflush для этого FILE перед звонком fork. Невыполнение этого требования приводит к неопределенному поведению .

См. Здесь формальные требования:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_05_01

В частности,

Обратите внимание, что после fork () существуют два дескриптора там, где раньше был один. Приложение должно гарантировать, что, если оба дескриптора будут доступны, они оба находятся в состоянии, когда другой может стать активным дескриптором первым. Приложение должно подготовиться к fork () точно так же, как если бы это было изменение активного дескриптора. (Если единственное действие, выполняемое одним из процессов, - это одна из функций exec или _exit () (не exit ()), дескриптор никогда не будет доступен в этом процессе.)

0 голосов
/ 11 мая 2011

Вам необходимо сбросить стандартный вывод:

printf( "\n child 1" )
fflush( stdout );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...