Alguém pode explicar por que isso está acontecendo e como corrigi-lo para que os dados enviados para stdin se comportem da mesma maneira que os dados digitados em stdin.
Para quem não consegue ver o .gif
Basicamente eu tenho 3 terminais de configuração. Um está executando um servidor netcat que é o seguinte comando.
nc -l 127.0.0.1 4000
O Terminal 2 está apenas executando um cliente netcat que é o seguinte comando.
nc 127.0.0.1 4000
Ao digitar no cliente, o que basicamente significa inserir dados no stdin ou no descritor de arquivo 0 desse programa. Os dados aparecem no servidor assim que a tecla Enter for pressionada. Este é o comportamento esperado.
Seria de esperar que, se você inserir dados em stdin de outra fonte que não o teclado, funcionaria da mesma forma, desde que você forneça uma nova linha no final ou até mesmo uma nova linha e um retorno de carro.
Embora este não seja o caso ao executar o terminal 3, que possui o seguinte comando.
echo "test\n" > /proc/$pid/fd/0
Curiosamente, os dados do echo aparecem no terminal 2, mas não são tratados como entrada do teclado e, portanto, nenhuma mensagem é enviada do clinet no terminal 2 para o servidor no terminal 1.
Isso eu concluo é besteira.