Meu objetivo é criar um servidor de eco simples nc
e um único fifo
. Não estou procurando a melhor maneira de fazer isso, estou apenas tentando entender a semântica dos seguintes comandos (quando o fork acontece, por que, o que muda, por que os comandos se comportam de maneira diferente ...).
Estou usando Bash, então eu não tenho certeza se todos os comandos irá funcionar com um POSIX sh
ou zsh
, ksh
...
Aqui estão os quatro comandos que estou mencionando no título (supondo que já o fiz mkfifo fifo
):
cat fifo | nc -l localhost 8888 > fifo
exec 3<> fifo && nc -l localhost 8888 <&3 >&3 && exec 3>&-
nc -l localhost 8888 <(cat fifo) > fifo
nc -l localhost 8888 < fifo > fifo
Agora eu esperaria que os 4 comandos fizessem a mesma coisa, no mínimo os dois últimos fizessem a mesma coisa.
- O primeiro comando se comporta conforme o esperado, um servidor de eco simples que é desligado quando o cliente fecha a conexão.
- Comporta-se como 1.
- Posso me conectar ao servidor, enviar dados, mas nunca recebo nada de volta. Quando fecho a conexão do cliente, o servidor é encerrado.
- Não é possível conectar-se ao servidor, o servidor escuta para sempre.
nc ... <>fifo
deve ser suficiente. gnu.org/software/bash/manual/html_node/Redirections.htmlnc ... <>fifo >&0
, já que<>fifo
abrefifo
para leitura e gravação em fd 0, e queremos que a saída também vá para lá.