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