我的代码段如下。我想看看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();
}
答案 0 :(得分:1)
文件描述符(从open
或pipe
等函数返回,但以不同的方式返回)是表示打开文件的小整数。
它们不同于文件句柄的概念,它是标准C中FILE
类型的指针(我使用术语“句柄”,尽管标准本身只是说明它将指针与流相关联并返回该指针)。
因此,您期待行为就像您所看到的那样,pipe()
抓住当前未使用的前两个描述符。
文件描述符0
,1
和2
分别指标准输入,标准输出和标准错误,类似于FILE *
值stdin
, stdout
和stderr
。