В общем, нет. Одна из причин такой оценки заключается в том, что стандартное чтение ввода-вывода из файлов, а не терминал, считывает блоки данных - BUFSIZ байт за раз, где BUFSIZ обычно является степенью двойки, например 512 или больше. Если данные находятся в файле, один процесс будет читать показанный файл целиком — другие ничего не увидят, если они совместно используют одно и то же описание открытого файла (аналогично файловому дескриптору, но несколько файловых дескрипторов могут совместно использовать одно и то же описание открытого файла, и могли быть в разных процессах) или читали бы весь один и тот же файл, если бы они не использовали одно и то же описание открытого файла.
Итак, вам нужен процесс для чтения файла, который знает, что ему нужно распределить информацию по трем процессам, и ему нужно знать, как подключиться к трем процессам. Возможно, ваша программа распространителя запускает три процесса и записывает их в отдельные входные каналы. Или может быть, что дистрибьютор подключается к трем сокетам и пишет в разные сокеты.
В вашем примере не показано/не описано, что произойдет, если маркер разделит 37 разделов.
У меня есть самодельная программа под названием tpipe
, похожая на команду Unix tee
, но она записывает копию (всех) своего стандартного ввода в каждый из процессов, а также по умолчанию в стандартный вывод. Это может быть подходящей основой для того, что вам нужно (по крайней мере, оно охватывает часть управления процессами). Свяжитесь со мной, если вы хотите копию - см. мой профиль.
Если вы используете Bash, вы можете использовать обычный tee
с заменой процесса для имитации tpipe
. См. это статью для иллюстрации того, как.
См. также SF 96245 для другой версии той же информации - плюс ссылка на программу под названием pee
, которая очень похожа на tpipe
(та же основная идея, немного другая реализация в различных отношениях).
person
Jonathan Leffler
schedule
11.01.2011