查询父子进程的两个描述符之间的管道创建

时间:2014-02-24 10:11:19

标签: c linux unix

在我的下面的工作计划中,我想了解,

如何/谁建立(创建){child's#pair [1]}描述符和{parent&#39s对[0]}描述符之间的单个管道通信?

因为在我的下面的程序中,我只是fork()' da进程并且立即在{child'对[1]}描述符和{parent'对[0]之间建立了管道连接描述符?你觉得接受这一点是否明显?

   #include <stdio.h>
   #include <stdlib.h>
   #include <errno.h>
   #include <sys/types.h>
   #include <unistd.h>
   int main(void)
   {
   int pair[2];
   char buf[30] ="";
   pipe(pair);
   if (!fork()) {
          printf(" CHILD: writing to the pipe\n");
          write(pair[1], "test", 5);
          printf(" CHILD: exiting\n");
          exit(0);
   } else {
          printf("PARENT: reading from pipe\n");
          read(pair[0], buf, 5);
          wait(NULL);
          printf(" PARENT: exiting\n");
   }
   return 0;
   }

请帮助我!!

1 个答案:

答案 0 :(得分:2)

你的问题不是特别清楚;第二个“问题”说明看起来很明显,但似乎本身并没有问题。例如,您实际上没有说明您提交的样本中出现了什么问题(如果有的话)。

我认为您应该知道的内容如下:

  1. pipe()创建两个文件描述符,这些描述符在操作系统,读者和作者中链接。

  2. 当您fork()父母和孩子都有可用的所有开放FD时。因此,如果您在pipe()之前致电fork(),那么读者和作者都将可供孩子使用。

  3. 通常父母将是读者,孩子是作家,父母将是作家,孩子是读者(即既不会写也不会),它父母关闭一个fd和孩子关闭另一个是正常的。