Инструмент командной строки для прослушивания нескольких FIFO одновременно - PullRequest
0 голосов
/ 28 июля 2011

Я ищу инструмент для чтения нескольких FIFO одновременно (возможно, с использованием select(2)) и вывода того, что прочитано, закрывая поток, когда все FIFO закрыты. Чтобы быть более точным, program будет вести себя следующим образом:

$ mkfifo a b
$ program a b > c &
$ echo 'A' > a
$ echo 'B' > b
[1]  + done       program a b > c
$ cat c
A
B
$ program a b > c &
$ echo 'B' > b
$ echo 'A' > a
[1]  + done       program a b > c
$ cat c
B
A

Моя первая попытка была использовать cat, но второй пример не будет работать (echo 'B' > b зависнет), потому что cat читает из каждого аргумента по порядку, а не одновременно. Какой правильный инструмент использовать в этом случае?

1 Ответ

0 голосов
/ 28 июля 2011

Хвост сделает это.

Использование:

tail -q -n +1 a b

Редактировать: Извините, что не сработало. Я посмотрю, смогу ли я найти что-нибудь еще.

Извините, я ничего не смог найти.

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

#!/bin/sh
rm c
cat a >> c &
cat b >> c &
wait

Вы можете получить чередование, но в остальном все должно работать нормально. Ожидание состоит в том, чтобы предотвратить выход программы до завершения всех программ cat (на случай, если у вас есть какая-то команда, которую нужно запустить после того, как все будет сделано). И rm должен убедиться, что c начинается пусто, так как команды cat добавляются в файл.

...