将Stdout重定向到另一个程序的Stdin

Redirecting stdout to stdin of another program

本文关键字:程序 Stdin 另一个 Stdout 重定向      更新时间:2023-10-16

我已经经历了大量的Google链接和这里的问题,以了解Pipping的工作原理我的第二个程序的stdin。

我正在尝试创建一个围绕文本字符,对其进行加密并将其放入字符串的程序。我的第二个程序应该采用该字符串并解密它。我了解创建管道所需的功能,但我不明白它是如何指向下一个程序的,我所看的所有源代码似乎都有父母和子女,而不是在其中第二个程序。

在两个程序的标准流之间建立管道是您如何启动程序的问题。如果一个人执行另一个(例如,fork()/execlp()),则父级将与pipe()创建管道,而父和子女使用dup2()将管道与适当的文件描述符相关联(在执行EXEC之前,在孩子的情况下执行EXEC)。

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

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

program1 | program2

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

ls | head -3 | tail -1