我是UNIX管道通信的新手,需要一些帮助来理解这一点。我需要创建管道和fork子进程,通过这些管道与父进程通信。我的问题是
a)为什么每个孩子的过程管道?
b)究竟什么是文件描述符,我是否需要为每个管道创建一个?
c)StdIn和StdOut对这一切做了什么?
答案 0 :(得分:4)
为什么每个子进程都有一个管道?
因为单个管道只有两个端点。如果您尝试在所有子项中共享一个管道,您将不知道哪个子进程生成了给定的输出。
文件描述符究竟是什么?
操作系统保存的打开文件表中的条目。
我是否需要为每个管道创建一个[文件描述符]?
任何打开任何类文件对象的进程(包括管道的一端)都需要有一个文件描述符,通过它可以与该类文件对象进行通信。实际上,在文件描述符表中指向该文件的条目正是打开文件 的原因。
stdin和stdout与此有什么关系?
stdin是文件描述符表中的条目0; stdout是条目1.如果您正在启动的进程读取并将其数据写入文件描述符0和1,那么可能是您希望管道连接的位置。