c管道为什么fd[0]和fd[1]是3和4
下面有一段代码。我想看看fd1和fd0的值是多少,在我创建的所有过程中,它们最终是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]);
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
和stderr0,1,2已经在使用(stdin、stdout、stderr)您没有包含fd*
的定义,但它们显然是文件描述符。文件描述符是一个小整数,用于标识隐藏在内核中的资源(打开的文件),而不是指针或缓冲区。您期望得到什么值?我不完全确定期望得到什么。一开始我以为可能会有一些人物四处游荡。不过马特帮我清理了