Итак, у меня есть следующий код
const int CMAX = 1048578;
int main(int argc, char *argv[]){
int fd[2];
pid_t v1, v2, v3, a;
if( pipe( fd ) == -1 ){
puts("Failed to create pipe !\n" );
return 1;
}
v1 = fork();
if(v1 == 0){
close(fd[0]);
write(fd[1], "hello", CMAX);
printf("v1 Parent's PID = %ld; Process' PID = %ld\n", getppid(), getpid());
}
if(v1 > 0){
v2 = fork();
if(v2 == 0){
printf("v2 Parent's PID = %ld; Process' PID = %ld\n", getppid(), getpid());
}
if(v2 > 0){
v3 = fork();
if(v3 == 0){
printf("v3 Parent's PID = %ld; Process' PID = %ld\n", getppid(), getpid());
a = fork();
if(a == 0){
printf("a Parent's PID = %ld; Child's PID = %ld\n", getppid(), getpid());
close(fd[1]);
char buf[CMAX];
int bytes = read(fd[0], buf, CMAX);
printf("Message: %s\nSize: %d", buf, bytes);
}
}
}
}
return 0;
}
Он выводит следующий текст:
v2 Parent's PID = 23859; Process' PID = 23861
v1 Parent's PID = 23859; Process' PID = 23860
v3 Parent's PID = 23859; Process' PID = 23862
a Parent's PID = 23862; Child's PID = 23863
Message:
Size: 0
Я хочу отправить сообщение (или любые данные) из v1
процесс к a
процессу.Я предполагаю, что я должен закрыть трубы в других процессах, но не уверен, как.Я пытался закрыть их в каждом процессе, но безуспешно (возможно, я закрыл их неправильно).