了解UNIX管道和文件描述符

问题描述:

我是UNIX管道通信的新手,需要一些帮助来理解这一点。我需要创建管道并将通过这些管道与父进程进行通信的子进程分离出来。我的问题是了解UNIX管道和文件描述符

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

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

c)StdIn和StdOut对所有这些做什么?

+2

很多问题!也许分裂每一个?对于UNIX/Linux问题,更好的尝试可能是unix.stackexchange.com。 – tjameson

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

因为单个管道只有两个端点。如果您试图在所有孩子*享单个管道,则不知道哪个子进程生成了给定的输出。

真的是什么文件描述符?

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

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

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

stdin和stdout与此有什么关系?

stdin是文件描述符表中的条目0;标准输入是条目1.如果要启动的进程读取和写入数据到文件描述符0和1,这可能是您想要连接管道的位置。