$ mknod pipe1
$ mknod pipe2
$ prg1 <pipe1 >pipe2 &
$ prg2 <pipe2 >pipe1 &
создаем трубы ручками, потом запускаем программы с редиректом потоков
теоретически должно работать
Я бы назвал такой метод некоректным: если программа prg1 попытается сделать вывод раньше, чем к другому концу подключится prg2, то получит SIGPIPE. С односторонним вводом другая хрень - EOF.
Once you have created a FIFO special file in this way, any process
can open it for reading or writing, in the same way as an ordinary file.
However, it has to be open at both ends simultaneously before you can
proceed to do any input or output operations on it. Opening a FIFO for
reading normally blocks until some other process opens the same FIFO for
writing, and vice versa.
Потом, да же если соединить программы таким макаром, то при блокируемом io возможна взаимная блокировка на вводе.
Стоит смотреть в сторону pty. А так же подумать как избежать взаимных блокировок. Например, alarm() или select().