Я написал базовую программу C++ в unix с системным вызовом fork() и wait(). Я всего лишь создаю одного ребенка. Я использовал две трубы. Итак, после работы fork с первым каналом я пишу от дочернего к родительскому, и как только родитель получает данные, родитель возвращается к дочернему во втором канале. после этого в родительской стороне я использую системный вызов wait (0). но все же мой родительский процесс умирает перед дочерним процессом?Проблема с вилкой и системным вызовом wait
структура что-то вроде этого:
main()
char buff[] = "Parent process kills";
char cuff[] = "before Child process";
int fd1[2];
int fd2[2];
pipe(fd1);
pipe(fd2);
if((pid = fork()) == 0)
{
close(fd1[0]);
close(fd2[1]);
write(fd1[1],buff,strlen(buff)+1);
read(fd2[0],cuff,sizeof(cuff));
}
else
{
close(fd1[1]);
close(fd2[0]);
read(fd1[0],buff,sizeof(buff));
write(fd2[1],cuff,strlen(cuff)+1);
wait((int *) 0);
}
close(fd1);
close(fd2);
}'
Несмотря на ожидание() используется, но до сих пор родительский процесс умирает до ребенка. Спасибо в adavance.
Помните, что 'fork' может потерпеть неудачу, и в этом случае возвращает' -1'. Поэтому ваш оператор 'if' не будет работать в этом случае. Вы всегда должны * проверять возвращаемые значения для сбоев. –