用C程序替换pipe-shellscript

时间:2013-02-17 06:53:25

标签: c bash pipe

我有以下Bash脚本:

cat | command1 | command2 | command3

命令永远不会改变。

出于性能原因,我想用一个小程序替换它,它运行命令并相应地创建和分配管道。

有没有办法在C中做到这一点?

2 个答案:

答案 0 :(得分:5)

正如其他人所说,你可能不会获得显着的业绩收益 假设您运行的命令大部分时间都是合理的,而不是将它们粘合在一起的shell脚本,所以即使胶水变得更快,它也几乎不会改变。

话虽如此,如果你想这样做,你应该使用fork()pipedup2()exec()函数。
fork会为您提供多个流程 pipe将为您提供一对文件描述符 - 您将其写入一个,您可以从另一个中读取。 dup2可用于更改文件描述符编号。你可以在一个进程中取一个管道的一边并使它成为文件描述符1(stdout),另一边你可以在另一个进程中创建文件描述符0(stdin)(不要忘记关闭正常的stdin,stdout)第一)。
exec(或其变体之一)将用于执行程序。

有很多细节需要填写。玩得开心。

答案 1 :(得分:2)

Here is an example几乎可以做到这一点。

处理本身没有性能优势,初始化只需几毫秒。显然,我们不知道你正在做这个的上下文,但只使用dash而不是bash可能会使你#!中单个字符更改的80%毫秒。 1}}