Cela fait un moment que je cherche à faire en sorte que cela fonctionne, donc je soupçonne une sorte de malentendu fondamental sur le fonctionnement des tuyaux est la cause première de mes problèmes.
Mon objectif est d'initier une connexion TCP à un hôte distant via netcat
et d'avoir deux canaux nommés sur le système de fichiers: l'un à partir duquel les processus peuvent lire pour obtenir les données entrantes, et l'autre à partir duquel les processus peuvent écrire pour servir de données sortantes. J'utilise actuellement la construction suivante:
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
À partir d'ici, je voudrais autoriser d'autres processus à lire et à écrire vers / depuis cette connexion TCP ouverte. Est-ce que cela "devrait juste fonctionner", ou y a-t-il une raison pour laquelle une construction comme celle-ci ne peut pas fonctionner?
Ce qui semble se produire actuellement, c'est que je peux lire out
sans problème, mais lorsque j'écris sur, in
j'obtiens une sortie mentionnant un tuyau cassé et toutes les communications ultérieures semblent être mortes. Pensées?
(Connexes: j'ai utilisé à l'origine:
netcat foo.bar.org 4000 < out > in &
mais l'a trouvé pour bloquer l'attente de l'entrée. Je suis également curieux à ce sujet, mais il vaut probablement mieux en parler dans une question distincte.)
write(stdout): Broken pipe
après (ou peu de temps après) l'écriture sur leout
tuyau.