Você deve conseguir que isso funcione com um FIFO e um pipe.
$ mkfifo fifo
$ ./pgm2 < fifo | ./pgm1 > fifo
A entrada do programa dois é o fifo e as saídas para o pipe. Programa de entrada é o tubo e saídas para o fifo.
Esteja avisado: isto é muito atrevido em geral, e pode travar se o "ping / pong" entre os processos não for perfeito.
Veja também esta pergunta do Stack Overflow: Como redirecionar o stdout do 2º processo de volta para o stdin do 1º processo?