将一个命令的输出作为输入管道输入另一个命令

我至少知道管道的基本知识。 但是,我不明白如何使用C管道在C中实现此任务。 我不知道如何将一个程序的输出作为另一个程序的输入等等。 例如:

ls | wc | ./add 

这里ls列出文件, wc给出列出的文件的计数,而./add添加wc给出的数字。

请帮忙!

编辑 :这是一项任务。 确切的问题陈述如下:

“编写C程序以读取两个(或更多)可执行程序的名称,并将第一个程序的输出重定向到第二个程序的输入,将第二个程序的输出重定向到第三个程序的输入,依此类推……”

使用管道(pipefd)创建管道时,您将获得两个文件描述符。 无论写入pipefd [1]是什么都可以从pipefd [0]中读取。 所以你需要做的是执行第一个程序,使其stdout与pipefd [1]相同,并执行第二个程序,使其stdin与pipefd [0]相同。 在执行命令之前,使用dup()/ close()技巧重新编号文件描述符,使它们变为0(stdin)或1(stdout)。

要将三个程序连接在一起,您将拥有两个管道。 中间程序将从第一个读取并写入第二个。

看来你需要创建一个程序来完成shell的工作的简单情况:创建并执行命令管道然后输出结果。

要做到这一点,需要您了解SIGPIPE ,子进程处理,输入/输出重定向,文件描述符, fork()exec()wait()等。

这篇关于创建管道的Linux Documentation Project文章应该有助于您找到正确的道路。

shell处理所有繁琐的工作,包括设置管道和创建进程,因此您根本不必担心这一点。 从程序的角度来看,这是stdin正常输入,这意味着你可以使用正常的输入函数,如scanf或来自stdin fread