好的..所以我正在尝试使用不同的流程..我实际上正在尝试创建 |
如前所述,我已经这样做了,如果我的例子是ls | sort
然后 ls 的 stdout 进入 sort 的 stdin。为此,我只有 1 个管道......但我必须在程序中的某个时刻执行这两个命令,因此我需要 2 个 execvp()
。我已经或多或少地学会了如何做到这一点。所以我将尽可能简单地提出我的问题:
我有一个 child 在运行,他的工作是接受ls
。在它执行 execvp()
之前,我做了 dup2(pipe1[1], 1)
以便管道的写入端替换标准输出。一旦它执行 execvp()
,他就会转到父级,而父级会进入一个辅助方法,该方法的工作是 fork()
。这会创建另一个子和父关系.. 并传递一个指向 pipe1
的指针,称为 p1
。使用此指针 dup2(p1[0], 0)
将 stdin 替换为管道的读取端。理想情况下,只要我继续这样做,我就可以使用同一个管道 n 次。
这个 child 做了和前一个一样的事情,执行第二个参数sort
,然后返回给它的父对象,父对象返回一个标志整数,指向下一个|
命令行或 NULL
如果没有则退出。我可以这样做吗?这可能吗?这是我的问题。
我很想发布一些代码,但太他妈长了。我也只是感兴趣,如果理论上我所说的是可能的,那就是通过几个 child 使用同一个管道,如果有一个干净的方法来做到这一点,我想指出它。我知道有更好的方法可以做到这一点,但我想这样做。这不是家庭作业,只是在非递归环境中使用管道的可选工作。谢谢。
最佳答案
你不能复制一个管道,它是一个文件描述符,它是一个有两端的管道。如果您需要更多命名管道,请使用 tee
。
你不能复制管道意味着你不能从两个进程访问它的一端,管道不能复制它的内容。
关于我可以在 C 中的 2 个子进程之间使用相同的管道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985492/