簡體   English   中英

使用具有多個過程的管道連續寫入和讀取

[英]Continuous writing and reading using pipes with multiple processes

我的代碼包含兩個過程。 父進程連續從stdin讀取單個字符並將其寫入管道(無需按Enter)。 子進程從管道讀取並寫入stdout。 我的父進程已成功寫入管道,但子進程未打印輸出。

子進程不輸出輸出的原因是,它停留在父進程的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);

為我工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM