【发布时间】:2022-01-12 05:12:22
【问题描述】:
我正在努力理解这个this answer。尤其是数据如何跨进程流动?
我假设输入流通过与管道连接的输出流经孩子的输入,然后由父通过管道输出收集。但是,在新一轮循环并在子进程中执行命令之前,读取的数据会发生什么变化?
数据是否在父进程内部缓冲(不知何故?我想知道是什么原因造成的),稍后这个缓冲区被复制并在fork()之后传递给子进程,然后子进程将保存的输入传递给exec()?
编辑 - 附加方面:
(在我提供的示例中,循环的每一圈都会创建新管道,并在调用 pipe() 时填充新的描述符。我创建了一个工作修改,其中表描述符的数量在循环外创建并重新填充。它如何影响从先前执行的命令中读取的数据?它存储在哪里,何时创建新管道并将新文件描述符存储在重用表中?)
【问题讨论】: