好吧..所以我正在尝试使用不同的进程..我实际上正在尝试创建|
,如前所述,我已经这样做了,如果我的例子是{{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}}并且如果没有则退出。我可以这样做吗?这可能吗?这是我的问题。
我很想发布一些代码,但它太长了。我只是感兴趣,如果理论上我说的是可能的,即通过几个孩子使用相同的管道,如果有一个干净的方法,我想指向它。我知道有更好的方法可以做到这一点,但我想这样做。这不是功课,只是在非递归环境中使用管道的可选工作。谢谢。
答案 0 :(得分:1)
你不能复制一个管道,它是一个文件描述符,它是一个有两端的管道。如果需要更多命名管道,请使用tee
。
您无法复制管道意味着您无法从两个进程访问它的一端,管道无法复制它的内容。