我至少知道管道的基本知识。但是,我不明白如何使用C管道在C中实现此任务。我不知道如何将一个程序的输出作为另一个程序的输入等等。例如:
ls | wc | ./add
此处ls
列出文件,wc
列出所列文件的计数,./add
添加wc
给出的数字。
请帮忙!
编辑:这是一项任务。确切的问题陈述如下:
“编写C程序以读取两个(或更多)可执行文件的名称 程序,并将第一个程序的输出重定向到输入 第二个程序,输出第二个程序到输入 第三个程序,依此类推......“
答案 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
中的fread
或stdin
等常规输入函数。