Я пытаюсь установить двусторонний канал между родительским и дочерним процессами в C, но мой код (как показано ниже) не работает:
int main() {
int fd1[2], fd2[2];
char c;
fprintf(stderr, "Pipe 1 return: %i\n", pipe(fd1));
fprintf(stderr, "Pipe 2 return: %i\n", pipe(fd2));
pid_t pid = fork();
if (pid == -1) {
fprintf(stderr, "Error forking");
return -1;
}
if (!pid) {
dup2(fd1[1], 1);
dup2(fd2[0], 0);
close(fd1[0]);
close(fd2[1]);
//fprintf(stderr, "setvbuffer output: %i\n", setvbuf(stdin, NULL, _IONBF, 0));
fprintf(stderr, "Parent runing. Receiving\n");
c = getchar();
fprintf(stderr, "Parent received char. Modifying\n");
putchar(c + 2);
fprintf(stderr, "Parent sent char\n");
} else {
dup2(fd1[0], 0);
dup2(fd2[1], 1);
close(fd1[1]);
close(fd2[0]);
//fprintf(stderr, "setvbuffer output: %i\n", setvbuf(stdin, NULL, _IONBF, 0));
fprintf(stderr, "Child running. Printing\n");
putchar('c');
c = getchar();
fprintf(stderr, "Child received returned char: %c\n", c);
}
}
Когда я запускаю эту программу, программа сразу же остается в ожидании первого getchar (). Я также пытался отправлять / получать строки текста, используя закомментированные строки setvbuf (), использовать sleep () перед чтением из stdin и т. Д.
Это упрощенная версия моего реального кода, который обменивается данными между двумя разными программами, и там я, кажется, могу успешно общаться в одном направлении.