将stdout重定向到另一个程序的stdin

时间:2015-05-07 21:25:30

标签: c++ c unix pipeline piping

我已经在这里浏览了大量的Google链接和问题,以便了解Pipping是如何工作的,但我似乎无法理解使我的stdout重定向到我的第二个程序的stdin的概念。

我正在尝试创建一个移动文本字符的程序,对其进行加密并将其放入字符串中。我的第二个程序应该接受该字符串并解密它。我理解创建管道所需的功能,但我不明白它是如何指向下一个程序的,我所看到的所有源代码似乎都包含父代和子代,而不是第二个项目。

2 个答案:

答案 0 :(得分:2)

在两个程序之间建立管道'标准流是你如何启动程序的问题。如果执行另一个(例如if (isset($_GET[folder])) { $gallery = $_GET[folder]; } / if (isset($_GET['folder'])) { $gallery = $_GET['folder']; } ),则父级创建具有fork()的管道,父级和子级使用execlp()来关联管道端点使用适当的文件描述符(在执行exec之前,在孩子的情况下)。

如果两个程序都没有启动另一个程序,那么 启动它们的程序(通常是shell)必须设置管道。

答案 1 :(得分:1)

假设您在基于unix的操作系统中使用shell,则使用管道|字符来创建此链接。例如:我想运行program1并将program1的标准输出重定向到program2作为其标准输入。

program1 | program2

这是一个linux示例,使用ls获取目录内容的名称,然后将其传递给head -3以获取前三个文件的名称。然后我们将这三个名称传递给tail -1以获取最后一个(或目录中第三个文件的名称)。

ls | head -3 | tail -1