Мой код состоит из двух процессов.Родительский процесс постоянно читает один символ из stdin и записывает в канал (без необходимости нажимать ENTER).Дочерний процесс читает из канала и пишет в стандартный вывод.Мой родительский процесс успешно записывает в канал, но дочерний процесс не печатает вывод.
Причина, по которой дочерний процесс не распечатывает выходные данные, заключается в том, что он застрял в цикле while родительского процесса и никогда не входит в цикл while дочернего процесса.
Когда я принудительно завершаю работуродительский процесс, использующий Activity Monitor на моем Mac, то, что я набрал, на самом деле распечатывается.Затем следует «Killed: 9»
Есть ли способ исправить мой код, чтобы каждый раз, когда Родитель (Вход) получал символ, Дочерний (Выход) печатал каждый символ без попадания в цикл whileродительский процесс?
char input() {
char input = getchar();
return input;
}
int main(void) {
int inputOutputFd[2];
pid_t childpid = 0;
system("/bin/stty raw igncr -echo");
if(pipe(inputOutputFd) < 0) {
perror("Failed to create pipe");
return 1;
}
if((childpid = fork()) == -1) {
perror("Failed to fork input child");
return 1;
}
//parent's code -INPUT
if (childpid > 0) {
close(inputOutputFd[0]);
printf("Please enter a word or phrase");
while(1) {
char inputChar = input();
write(inputOutputFd[1], &inputChar, sizeof(inputChar));
}
close(inputOutputFd[1]);
wait(NULL);
} else {
//child -OUTPUT
char outputChar;
close(inputOutputFd[1]);
while (read(inputOutputFd[0], &outputChar, sizeof(outputChar)) > 0)
{
printf("%c", outputChar);
fflush(stdin);
}
} //END OF IF-ELSE LOOP
}//END MAIN