Я действительно должен был разработать нечто подобное для школьного проекта.Идея заключалась в том, чтобы обобщить понятие каналов для достижения чего-то подобного:
process1 --> process2
--> process3 --> stdout
--> process4 --> process5 --> stdout
--> process6 --> stdout
(также возможны циклы)
Чтобы сделать это, моя программа сделала следующие вещи:
- парсинг файла, содержащего график канала (процессы и каналы)
- использование fork () для создания дочерних процессов
- для каждого дочернего процесса, закрываю конец записииз входящих каналов я закрываю конец чтения исходящих каналов и вызываю execl ().Остальное обрабатывается дочерними процессами (остерегайтесь тупиковых ситуаций!), В зависимости от того, чего вы пытаетесь достичь.
В моем случае, поскольку названные процессы были также разработаны мной, я мог бы простопередать дескрипторы файла pipe в качестве аргументов дочерним процессам (--pipe-in .... --pipe-out ....), но, поскольку вы используете существующие программы, основанные на stdin / stdout, вы можете использовать dup2 () "скопировать" стандартные каналы ввода / вывода.
Я не знаю, так ли вы планируете это делать, но это выполнимо таким образом.