了解UNIX管道和文件描述符

时间:2011-09-18 15:34:54

标签: unix ubuntu

我是UNIX管道通信的新手,需要一些帮助来理解这一点。我需要创建管道和fork子进程,通过这些管道与父进程通信。我的问题是

a)为什么每个孩子的过程管道?

b)究竟什么是文件描述符,我是否需要为每个管道创建一个?

c)StdIn和StdOut对这一切做了什么?

1 个答案:

答案 0 :(得分:4)

  

为什么每个子进程都有一个管道?

因为单个管道只有两个端点。如果您尝试在所有子项中共享一个管道,您将不知道哪个子进程生成了给定的输出。

  

文件描述符究竟是什么?

操作系统保存的打开文件表中的条目。

  

我是否需要为每个管道创建一个[文件描述符]?

任何打开任何类文件对象的进程(包括管道的一端)都需要有一个文件描述符,通过它可以与该类文件对象进行通信。实际上,在文件描述符表中指向该文件的条目正是打开文件 的原因。

  

stdin和stdout与此有什么关系?

stdin是文件描述符表中的条目0; stdout是条目1.如果您正在启动的进程读取并将其数据写入文件描述符0和1,那么可能是您希望管道连接的位置。