【问题标题】:Check for a particular string in stdin检查标准输入中的特定字符串
【发布时间】:2023-04-04 06:52:01
【问题描述】:

我有个小问题不知道怎么解决。

我有一个程序,它基本上由标准输入中的输入命令。它只是一直运行,直到接收到特定的字符串,然后执行其他操作。好的,我无权访问控制这些输入的代码,但我想添加一个新命令。

我的想法如下:

。在我的程序中创建一个管道

。分叉进程

。其中一个继续执行原始程序,而另一个从 stdin 读取。

。将继续正常执行的进程的标准输入重定向到管道。

。继续从标准输入监听的部分,检查接收到的内容,如果不是新命令,只需重定向管道(以便旧命令仍然有效)

。如果是新命令,发送特定信号。

我一直在考虑在 c++ 中使用 pipe/fork/dup2 来实现它,但我不知道如何在继续执行的过程中发送和捕获信号。我怎么能在 C++ 中做到这一点?你们有什么建议吗?这可能有效吗?

【问题讨论】:

  • 为什么不用简单的命令行:myprog | prog_being_commanded
  • 确实如此。如果您想要更简单的命令,请使用脚本进行管道处理。

标签: c++ pipe signals


【解决方案1】:

您的程序应该只执行以下操作:

  1. stdin读取数据。
  2. 搜索新的命令字符串。如果找到,做一些工作。
  3. 将所有处理后的输入发送到stdout(或除提取的命令数据之外的所有数据,取决于您的需要)

它应该像这样执行:

$ cat input.txt | my_prog | other_prog

所有未由您的程序处理的输入,将转到现有程序,因为它来自 input.txt(当然,数据源可以是任意的,不一定是文件)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2016-05-01
    相关资源
    最近更新 更多