Я искал везде, и единственная причина, по которой я знаю, что я получаю неверный файловый дескриптор для fdUp[READ]
, - это если бы я ранее закрыл его.Я не верю, что сделал это, и я не могу понять, почему.
bool start_process(void) {
int fdDown[2];
int fdUp[2];
FILE* in;
FILE* out;
if(pipe(fdDown) && pipe(fdUp)) {
return false; //pipe failed
}
switch(fork()) {
case -1:
return false; //fork failed
case 0:
// child
close(fdDown[WRITE]);
dup2(fdDown[READ], STDIN_FILENO);
close(fdDown[READ]);
close(fdUp[READ]);
dup2(fdUp[WRITE], STDOUT_FILENO);
close(fdUp[WRITE]);
execlp("./process", "process1", (char *) 0);
return false; //exec failed
default:
//parent
close(fdDown[READ]);
out = fdopen(fdDown[WRITE], "w");
close(fdUp[WRITE]);
in = fdopen(fdUp[READ], "r");
if(in==NULL) printf("%s\n", strerror(errno)); //BAD FILE DESCRIPTOR
fprintf(out, "msg from parent\n");
fflush(out);
char buf[100];
fgets(buf, 100, in);
printf("%s", buf);
wait(NULL);
}
return true;
}