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

时间:2012-08-20 04:36:17

标签: c pipe

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

ls | wc | ./add

此处ls列出文件,wc列出所列文件的计数,./add添加wc给出的数字。

请帮忙!

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

  

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

3 个答案:

答案 0 :(得分:1)

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

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

This Linux Documentation Project article on creating pipelines应该有助于您走上正确的道路。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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