Я пытаюсь написать программу C, в которой основной процесс создает двух дочерних элементов: Ping и Pong. Ping печатает «ping», за которым следует число, а Pong печатает «pong», за которым следует число, результат должен быть таким, как в примере выполнения на Рисунке 1: «
![enter image description here](https://i.stack.imgur.com/BGxgn.png)
Вот что я пытался сделать:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
void main(){
//initializing pipes
int td[2];
int td2[2];
pipe(td);
pipe(td2);
int pid=fork();
if(pid){ //in parent process
int pid2=fork();
if(pid2){// still in parent process
//1st time
int number1;
printf("Enter a number: ");
scanf("%d",&number1);
write(td[1],&number1,sizeof(number1));
printf("<>");
write(td2[1],&number1,sizeof(number1));
printf("--");
//2nd time
int number2;
printf("Enter a number: ");
scanf("%d",&number2);
write(td[1],&number2,sizeof(number2));
printf("<>");
write(td2[1],&number2,sizeof(number2));
printf("--");
}
else{// in pong process
int number;
read(td2[0],&number,sizeof(number));
printf("pong%d \n",number);
}
}
else{ //in ping process
int number;
read(td[0],&number,sizeof(number));
printf("ping%d \n",number);
}
}//main end
объяснение: проблема, с которой я столкнулся здесь, заключается в том, что pong печатается перед ping, а родительский процесс не ждет своих дочерних элементов до конца (и некоторые выходные данные печатаются после root / desktop et c ..)
Другая проблема, которую я решил, у меня был метод чтения в родительском процессе, он устранил мою проблему, потому что я знаю, что чтение заставляет программа ожидает, пока что-то не будет записано в канал, но в этом случае у нас есть "запись" в родительском процессе, поэтому родитель не ждет
Я также пытался реализовать ожидание (NULL), но он похоже, не работает.
любое предложение будет очень признательно