我有以下Bash脚本:
cat | command1 | command2 | command3
命令永远不会改变。
出于性能原因,我想用一个小程序替换它,它运行命令并相应地创建和分配管道。
有没有办法在C中做到这一点?
答案 0 :(得分:5)
正如其他人所说,你可能不会获得显着的业绩收益 假设您运行的命令大部分时间都是合理的,而不是将它们粘合在一起的shell脚本,所以即使胶水变得更快,它也几乎不会改变。
话虽如此,如果你想这样做,你应该使用fork()
,pipe
,dup2()
和exec()
函数。
fork
会为您提供多个流程
pipe
将为您提供一对文件描述符 - 您将其写入一个,您可以从另一个中读取。
dup2
可用于更改文件描述符编号。你可以在一个进程中取一个管道的一边并使它成为文件描述符1(stdout),另一边你可以在另一个进程中创建文件描述符0(stdin)(不要忘记关闭正常的stdin,stdout)第一)。
exec
(或其变体之一)将用于执行程序。
有很多细节需要填写。玩得开心。
答案 1 :(得分:2)
Here is an example几乎可以做到这一点。
处理本身没有性能优势,初始化只需几毫秒。显然,我们不知道你正在做这个的上下文,但只使用dash
而不是bash
可能会使你#!
中单个字符更改的80%毫秒。 1}}