我有一个任务:
编写一个C程序来读取两个(或更多)可执行程序的名称,并将第一个程序的输出重定向到第二个程序的输入,将第二个程序的输出重定向到第三个程序的输入,以此类推...
我知道如何在shell中使用管道的基础知识。然而,我不知道如何使用C管道实现此任务。我不知道如何将一个程序的输出作为另一个程序的输入等。例如,在shell中:
编写一个C程序来读取两个(或更多)可执行程序的名称,并将第一个程序的输出重定向到第二个程序的输入,将第二个程序的输出重定向到第三个程序的输入,以此类推...
我知道如何在shell中使用管道的基础知识。然而,我不知道如何使用C管道实现此任务。我不知道如何将一个程序的输出作为另一个程序的输入等。例如,在shell中:
ls | wc | ./add
这里,ls
列出文件,wc
给出列出文件的数量,./add
将wc
给出的数字相加。
我该从哪里开始在C程序中实现管道?
|
都需要一个管道。首先,你需要创建一个管道,并使用 fork() 函数进行进程复制。在子进程中,将写入端复制到 stdout 上,然后使用 exec() 函数执行 ls 命令。现在再次使用 fork() 进行进程复制,在子进程中将读取端复制到 stdin 上,然后使用 exec() 函数执行 wc 命令。根据需要重复此过程 :) - Greg Inozemtsevdash
或ash
这样的简单 shell 是如何做到的?甚至不要试图查看bash
的源代码。 - Craig Ringerps aux | grep root | grep sbin
。这个主题在网上的文档非常糟糕,希望这能帮助其他人。”我通过谷歌搜索"c pipe output of one command to another"找到了该链接。 - Gabriel Staples