繁体   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