0

我有以下 Bash 脚本:

cat | command1 | command2 | command3

命令永远不会改变。

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

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

4

2 回答 2

5

正如其他人所说,您可能不会获得显着的性能优势。
可以合理地假设您运行的命令花费了大部分时间,而不是 shell 脚本将它们粘合在一起,因此即使粘合变得更快,它也几乎不会改变任何东西。

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

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

于 2013-02-17T07:50:07.013 回答
2

这是一个几乎可以做到这一点的示例。

处理本身没有性能优势,只有几毫秒的初始化时间。显然,我们不知道您正在执行此操作的上下文,但仅使用dash而不是bash可能会从您的单个字符更改中获得 80% 的毫秒数#!

于 2013-02-17T08:01:33.190 回答