我可以在C中的2个子进程之间使用相同的管道吗?

时间:2013-11-14 18:30:26

标签: c linux

好吧..所以我正在尝试使用不同的进程..我实际上正在尝试创建|,如前所述,我已经这样做了,如果我的例子是{{1然后ls的stdout进入了排序的标准输入。要做到这一点,我只有一个管道..但我必须在程序中的某个点执行两个命令,因此我需要2 ls | sort。我已经学会了如何或多或少地做到这一点......所以我将尽可能简单地提出我的问题:

我有一个孩子在跑,他的工作是execvp()。在它执行ls之前,我使它{i} execvp(),以便管道的写端替换stdout。一旦执行dup2(pipe1[1], 1),他就会转到父母,父母会进入辅助方法,其工作是execvp()。这会创建另一个子和父关系..并传递一个指向fork()的指针pipe1。使用此指针p1将stdin替换为管道的读取端。理想情况下,只要我继续这样做,这就允许我使用相同数量的管道。

这个子做的事情与之前的做法相同,并执行第二个参数dup2(p1[0], 0),然后返回其父级,该父级返回指向命令行中下一个sort的标志整数或{ {1}}并且如果没有则退出。我可以这样做吗?这可能吗?这是我的问题。

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

1 个答案:

答案 0 :(得分:1)

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

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