Проверьте наличие определенной строки в stdin - PullRequest
0 голосов
/ 10 июля 2010

У меня есть небольшая проблема, которую я не знаю, как решить.

У меня есть программа, которая в основном управляется входами в stdin. Он просто продолжает работать, пока не получит определенную строку, а затем сделает что-то еще. Хорошо, У меня нет доступа к коду, который управляет этими вводами , но я хотел бы добавить новую команду.

У меня есть следующая идея:

. Создать трубу в моей программе

. Форк процесс

. Один из них продолжает исходную программу, а другой читает из стандартного ввода.

. Перенаправить стандартный процесс, который продолжил обычное выполнение, в канал.

. Часть, которая продолжает слушать из stdin, проверяет, что получено, если это не новая команда, просто перенаправьте канал (чтобы старые команды все еще работали)

. Если это новая команда, отправьте определенный сигнал.

Я думал о реализации этого с pipe / fork / dup2 в c ++, но я не знаю, как бы я отправил и поймал сигнал в процессе, который продолжил выполнение. Как я могу сделать это в C ++? Ребята, у вас есть предложения? Это может работать?

1 Ответ

0 голосов
/ 11 сентября 2013

Ваша программа должна сделать следующее:

  1. прочитать данные из stdin.
  2. найти новую командную строку.если найден, выполнить какую-то работу.
  3. отправить все обработанные вами данные на stdout (или все данные, кроме извлеченных данных команд, в зависимости от ваших потребностей)

И это должно быть выполненонапример:

$ cat input.txt | my_prog | other_prog

Все входные данные, которые не обрабатываются вашей программой, перейдут в существующую программу, как это было получено из input.txt (конечно, источником данных может бытьпроизвольно, не обязательно файл).

...