Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c管道为什么fd[0]和fd[1]是3和4_C_Linux_Fork_Pipe - Fatal编程技术网

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

c管道为什么fd[0]和fd[1]是3和4,c,linux,fork,pipe,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]);

下面有一段代码。我想看看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();
      }
if(管道(fd)<0)
printf(“管道错误”);
如果((pid=fork())<0)
{
printf(“Fork错误”);
}
如果(pid>0)//则为else
{
关闭(fd[0]);
写入(fd[1],“Hi,Im Parent\n”,15);
printf(“父项中fd1的值为%d,fd0的值为%d。\n”,fd[1],fd[0]);
printf(“父进程是%d\n”,pid);
printf(“我的真实id是:%d,我的父id是%d\n”,getpid(),getppid());
等待();
}
文件描述符(从
open
pipe
等函数返回,尽管方式不同)是表示打开文件的小整数

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

因此,您可能会看到类似于您所看到的行为,
pipe()
抓取前两个当前未使用的描述符


文件描述符
0
1
2
分别指标准输入、标准输出和标准错误,类似于
文件*
stdin
stdout
stderr

0,1,2已经在使用(stdin、stdout、stderr)您没有包含
fd*
的定义,但它们显然是文件描述符。文件描述符是一个小整数,用于标识隐藏在内核中的资源(打开的文件),而不是指针或缓冲区。您期望得到什么值?我不完全确定期望得到什么。一开始我以为可能会有一些人物四处游荡。不过马特帮我清理了