2

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

ls | wc | ./add

这里ls列出文件,wc给出列出文件的计数,并./add添加由wc.

请帮忙!

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

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

4

3 回答 3

1

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

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

于 2012-08-20T12:56:42.667 回答
1

看来您需要创建一个程序来执行 shell 工作的一个简单案例:创建并执行命令管道,然后输出结果。

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

这篇关于创建管道的 Linux 文档项目文章应该可以帮助您走上正确的道路。

于 2012-08-20T06:38:58.230 回答
0

Shell 处理所有繁重的工作,包括设置管道和创建进程,因此您根本不必担心这些。从您的程序的角度来看,这是来自 的正常输入stdin,这意味着您可以使用正常的输入功能,例如scanffreadfrom stdin

于 2012-08-20T06:16:52.947 回答