c - 识别程序 "before"和 "after"管道中的程序来自同一个 "toolset"

标签 c unix pipe pipeline

说,我正在编写一些工具集,其中每个工具都对相同的文本数据流进行操作,对其进行解析,对其进行一些操作并使用与原始输入相同的语法返回文本流。这些工具可以是 在管道中组合(与其他 unix 工具/脚本/其他)。因为 文本输入处理(解析)非常昂贵,我想避免它以防万一 工具集中的两个或多个工具在管道中一个接一个地使用 相反,二进制流(直接存储在内存结构中,没有无用的“额外”解析)。是吗 可能知道(使用一些技巧、进程间通信或其他任何方式)如果 管道中任何工具“之前”或“之后”的工具是工具集的一部分?我猜 unix 环境没有为这种“信号”(AFAIK)做好准备。感谢您的想法...

最佳答案

不,通过管道连接在一起的进程没有双向通信的方法。如果解析真的非常昂贵以至于这是必要的(我猜它不是,但对其进行分析),那么我可以想到两个选项:

  • 有一个主程序可以选择告诉它运行哪些工具,以什么顺序运行,然后让它运行一个“解析”工具,然后是请求的工具(全部使用二进制 I/O),然后是一个“输出”工具。公开与解析/输出工具一起包装的各个工具也不是非常困难。
  • 如果希望用户具备足够的知识,让每个工具都允许标志告诉他们期望二进制输入并给出二进制输出,以便用户可以像这样链接:

    tool1 -o | tool2 -i -o | tool3 -i -o | tool4 -i
    

    其中-o表示给出二进制输出,-i表示接受二进制输入。

关于c - 识别程序 "before"和 "after"管道中的程序来自同一个 "toolset",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542423/

相关文章:

c - 为家庭作业制作 shell

c - C语言中的Blowfish加密函数(BF_encrypt)

c - 如果我们知道半径和坐标 x,y,如何在 TGA 中绘制圆?

linux - 如何使用完整路径列出 Linux 目录中的所有文件,这些文件包含 root 用户和其他用户使用的基本命令和 shell?

将此 Shell 命令转换为能够在 C 语言上使用

c - 为什么我们需要取消映射才能使PE文件有效?

c++ - 通过命令行在 Mac 上编译 Cplex 程序

vim - 是否可以在 vim 中直接读入新缓冲区?

linux - 我需要在多线程读取调用中保护 fd 吗?

pipe - 结合 Enum.map 和 Enum.each