A definição de um pipe é que os dados gravados nele são lidos no outro extremo. Um pipe não duplica dados. Ler em um tubo é uma operação destrutiva. Se houver dois leitores em um pipe, cada byte será lido por apenas um dos leitores.
Se você quiser espionar a comunicação entre dois programas através de um pipe, você pode fazê-lo inserindo tee
entre os programas. Existem dois canais: um do gravador para tee
e um de tee
para o leitor.
mkfifo pipe_w pipe_r
writer >pipe_w
reader <pipe_r
<pipe_w tee pipe_r
O esquema de nomeação de canal na sua pergunta é inconsistente, por isso não sei exatamente o que você tentou. Parece que você tentou alimentar os dados de um canal de volta para si mesmo. Isso não funciona: você criou um loop fechado em que alguns dos dados voltam para o pipe para sempre (apenas alguns dos dados, porque é imprevisível quais bytes retornarão ao pipe e quais bytes irão para o original). leitor).
Se houver um canal entre dois processos e você não puder alterar o encanamento, a maneira mais fácil de espioná-lo é rastrear o processo do gravador ou do leitor. Por exemplo, se o processo do gravador tiver o PID 123 e tiver o canal aberto no descritor de arquivo 4, no Linux, você pode usar
strace -p123 -e write=4