现在在C管道IPC

时间:2012-04-25 07:41:09

标签: c ipc pipe

对于自学习程序,我想用管道连接2个程序。 第一个程序接受输入,使其上升并打印到屏幕,在此示例中,第一个程序被执行但不能输入输出。我如何在第二个程序中更改管道close()函数以获得结果。

1 个答案:

答案 0 :(得分:1)

在写入之后立即关闭输出管道或者在每次写入字符后将第一个程序修改为fflush(stdout)(因为std(in | out)的缓冲性质第二个程序卡在读取时,第一个程序等待输入,因为它没有' t得到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;
}