c管道为什么是fd [0]和fd [1] 3和4

时间:2014-10-06 22:48:25

标签: c linux fork pipe

我的代码段如下。我想看看fd1和fd0的价值是什么,在我创建的所有流程中它们最终都是3和4?为什么会这样。

  if (pipe(fd) < 0)
        printf("Pipe Error");
      if ((pid = fork()) < 0 )
      {
        printf("Fork Error");
      }
      else if (pid > 0) //daddy
      {
        close (fd[0]);
        write(fd[1],"Hi, Im Parent \n", 15);
        printf("Value of fd1 is %d and fd0 is %d in parent. \n", fd[1], fd[0]);
        printf("Parent Process is %d \n", pid);
        printf("My true id is: %d and my parent id is %d \n", getpid(), getppid());
        wait();
      }

1 个答案:

答案 0 :(得分:1)

文件描述符(从openpipe等函数返回,但以不同的方式返回)是表示打开文件的小整数。

它们不同于文件句柄的概念,它是标准C中FILE类型的指针(我使用术语“句柄”,尽管标准本身只是说明它将指针与流相关联并返回该指针)。

因此,您期待行为就像您所看到的那样,pipe()抓住当前未使用的前两个描述符。

文件描述符012分别指标准输入,标准输出和标准错误,类似于FILE *stdinstdoutstderr