簡體   English   中英

現在在C中管道IPC

[英]Pipes IPC in C now

出於自我學習的目的,我想將2個程序與管道連接起來。 第一個程序接受輸入,使其上方並打印到屏幕,在此示例中,第一個程序被執行,但沒有輸入輸出。 我如何在第二個程序中更改管道close()函數以獲取結果。

寫入后立即關閉輸出管道,或者在每次寫入字符后將第一個程序修改為fflush(stdout)(由於std(in | out)的緩沖性質,第二個程序在讀取時卡住,第一個程序等待輸入,因為它沒有獲得EOF) -第二個程序的close()將EOF發送到第一個,第一個終止,並在終止時自動刷新stdout)。

int main(int argc, char** argv) {
  pid_t pid;
  int fi[2];
  int fo[2];

  char c;

  if (pipe(fi) < 0)
    perror("pipe");
  if (pipe(fo) < 0)
    perror("pipe");

  switch ( fork() ) {
  case -1:
    exit(1);
  case 0:
    dup2(fi[0], STDIN_FILENO);
    close(fi[1]);
    dup2(fo[1], STDOUT_FILENO);
    close(fo[0]);
    execlp("pipes1", "pipes1",(char *)NULL);

  default:
    close(fi[0]);
    close(fo[1]);
    break;
  }

  write(fi[1], "t", 1);
  close(fi[1]);
  read(fo[0], &c, 1);
  printf("%c\n", c);
  close(fo[0]);

  return 0;
}

暫無
暫無

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

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