C中的多个管道

时间:2011-07-25 21:26:54

标签: c exec fork pipe dup2

我想在c中实现多个管道,所以我可以这样做,其中|||表示将stdin复制到N个管道命令):

cat /tmp/test.log ||| wc -l ||| grep test1 ||| grep test2 | grep test3

这将返回文件文件中包含'test1'字符串文件中包含'的行的行数test2'&& 'test3'字符串

换句话说,这会产生这3条常规管道的效果:

cat /tmp/test.log  | wc -l --> stdout
                   | grep test1 --> stdout
                   | grep test2 | grep test3 --> stdout

有人已经实现了这样的事情吗?我没找到任何东西...... 注意:我知道可以使用脚本语言或使用bash多个文件描述符来完成,但我正在搜索C代码来执行此操作。

谢谢!

2 个答案:

答案 0 :(得分:4)

也许你应该从tee命令和examine their code开始。

答案 1 :(得分:0)

因为在C中不可能有多个进程(或线程)读取相同的文件描述符而不会耗尽数据读取,所有解决方案都必须将读取的数据存储在临时文件中然后每个人都读取临时文件。