说,我正在编写一些工具集,其中每个工具都对相同的文本数据流进行操作,对其进行解析,对其进行一些操作并使用与原始输入相同的语法返回文本流。这些工具可以是 在管道中组合(与其他 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/