C语言 使用具有多个进程的管道连续写入和读取



我的代码由两个进程组成。父进程不断从 stdin 读取单个字符并写入管道(无需按 Enter 键)。子进程从管道读取并写入标准输出。我的父进程成功写入管道,但子进程未打印输出。

子进程不打印输出的原因是因为它卡在父进程的 while 循环中,并且永远不会进入子进程的 while 循环。

当我使用Mac上的活动监视器强制退出父进程时,我输入的内容实际上被打印出来。紧随其后的是"被杀:9"

有没有办法修复我的代码,以便每次 Parent(Input) 收到一个字符时,Child(Output) 都会打印出每个字符,而不会卡在父进程的 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

一切正常,没有任何卡住或任何东西,直到您期望在控制台中输出。错误在这两行中:

  printf("%c", outputChar);
  fflush(stdin);

stdin标准输入。您正在写入标准输出

  printf("%c", outputChar);
  fflush(stdout);

为我工作。

最新更新