【问题标题】:Multiple pipes in CC中的多个管道
【发布时间】:2011-07-25 21:26:53
【问题描述】:

我想在 c 中实现多管道,所以我可以这样做,其中||| 表示将标准输入复制到 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 代码来完成它。

谢谢!

【问题讨论】:

  • 请注意,'||'运算符在 shell 中表示“逻辑或”,即 false || echo hi 结果为“hi”。
  • 你所追求的类似于this question;那里的答案应该对你有用。

标签: c exec fork pipe dup2


【解决方案1】:

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

【讨论】:

  • 您还可以查看要 bash 的源并确定它如何执行类似的管道功能。您的描述中没有任何内容明确说明整理和输出整理的顺序很重要;你也必须照顾好它。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2016-07-06
    相关资源
    最近更新 更多