Я хочу иметь возможность разветвлять процесс, чтобы у дочернего элемента и родительского элемента была двунаправленная связь с использованием каналов. Я создаю 2 канала и выполняю родительское чтение с конца 1-го канала и пишу в начало второго, и наоборот, но у меня возникают некоторые проблемы.
Здесь приведена краткая версия кода (проверка ошибок не указана)
void PlayGame(int in, int out, int first, int id){
FILE *inStream = fdopen(in, "r");
FILE *outStream = fdopen(out, "w");
if (first) fputc( id, outStream);
while(1){
int c = fgetc(inStream);
printf("process %d has read %d\n", id, c);
fputc( id, outStream);
}
}
int main (void){
int fd[2];
int fd1[2];
pipe(fd);
pipe(fd1);
pid_t pid = fork();
if (pid == 0){
PlayGame(fd[0], fd1[1], 0, 1);
exit(0);
}
PlayGame(fd1[0], fd[1], 1, 2);
exit(0);
}
Чего я хочу добиться, так это чтобы родитель записывал символ в канал, а потомок ждал, пока он не получит символ, а затем записывает свой ответ и снова ждет родителя. Что я тут не так делаю?
И родитель, и ребенок застряли при первом вызове
int c = fgetc(inStream);