У меня есть программа на C, которая читает из стандартного ввода и выполняет некоторые операции. Меня просят вводить информацию периодически (каждые 20 секунд) и оставлять взаимодействие с пользователем таким же, когда я выполняю некоторые тесты.

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

Я попытался (./periodic.sh; cat)> ./myprogram, который не работает, потому что он ожидает завершения сценария (и наоборот).

2 ответа2

1

Для этого вы можете использовать "розетку" в середине. Вы должны настроить файл сокета (например, /tmp/program.socket а затем адаптировать свою программу для чтения из нее вместо стандартного ввода).

Тогда вы можете иметь столько программ, сколько необходимо для записи в указанный сокет.

1

Ваш скрипт не работает не потому, что «./myprogram» ожидает завершения вашего скрипта, а потому, что «./myprogram» ожидает неопределенного завершения "cat", которое вы запустили в своей подоболочке «(...)» ,

Несмотря на то, что ваш вопрос очень расплывчатый, я думаю, вам нужно научиться пользоваться трубами.

mkfifo mypipe
while true; do
    ./periodic.sh > mypipe &
    ./myprogram < mypipe
done

Этот код будет всегда ждать вашего ввода в «./periodic.sh», как только вы его укажете, он будет передан в канал "mypipe" (в фоновом режиме), а затем «./myprogram» обработает его вывод.

Надеюсь, это то, что вы искали. Как я уже говорил, ваш вопрос немного расплывчатый.

Повеселись.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .