1

好的..所以我正在尝试使用不同的流程..我实际上是在尝试|如前所述进行创建,并且我这样做的方式是,如果我的示例是ls | sort,则 ls 的标准输出进入排序的标准输入. 为此,我只有 1 个管道。但我必须在程序中的某个位置执行这两个命令,因此execvp()我需要 2 个。我已经或多或少地学会了如何做到这一点..所以我要让我的问题尽可能简单:

我有一个孩子在跑步,他的工作就是带ls。在它执行之前execvp(),我dup2(pipe1[1], 1)这样做是为了让管道的写入端替换标准输出。一旦它执行execvp(),他就会去父级,而父级会进入一个辅助方法,其工作是fork(). 这会创建另一个子父关系.. 并传递一个指向pipe1被调用的指针p1。使用此指针dup2(p1[0], 0)将标准输入替换为管道的读取端。理想情况下,只要我继续这样做,我就可以使用相同的管道 n 次。

这个孩子做与前一个相同的事情并执行第二个参数sort,然后返回其父级,后者返回一个标志整数,指向|命令行中的下一个,NULL如果没有则返回并退出。我可以这样做吗?这可能吗?那是我的问题。

我很想发布一些代码,但它太长了。如果理论上我所说的是否可行,我也很感兴趣,那就是通过几个孩子使用相同的管道,如果有一种干净的方法可以做到这一点,我想指出它。我知道有更好的方法可以做到这一点,但我想这样做。这不是家庭作业,只是在非递归环境中使用管道的可选工作。谢谢你。

4

1 回答 1

1

你不能复制管道,它是一个文件描述符,它是一个有两端的管道。tee如果您需要更多和命名管道,请使用。

您无法复制管道意味着您无法从两个进程访问它的一端,管道无法复制其内容。

于 2013-11-14T18:39:16.690 回答