Il s'agit d'un simple serveur d'écho sous Unix, utilisant nc:
mkfifo fifo
cat fifo | nc -k -l 4458 -v | cat >fifo
(basé sur cela )
Comme je peux le voir, le flux de données fonctionne comme suit:
fifo (my named pipe)
|
| (using cat)
|
v
nc
|
| (using cat)
|
v
fifo
Et voici la question: pourquoi ça ne marche pas?
nc -k -l 4458 -v >fifo <fifo
Vous remarquerez que si vous essayez de le telnet
faire localhost
, 4458
vous obtiendrez une erreur "Connexion refusée".
cat myfifo | nc -k -l 4458 > myfifo
fonctionne également. Si vous utilisez un fichier texte, file.txt comme cecinc -k -l 4458 < file.txt > file.txt
La première connexion se connectera et se fermera (est logique parce que l'entrée a été tronquée et EOF ferme le socket), la deuxième connexion deviendra un serveur d'écho oublieux: il fera écho toutes les deux lignes et enregistrez les lignes sans écho dans le fichier texte.Réponses:
C'est parce que la commande netcat n'a même pas encore commencé! Le shell lorsque vous essayez d'ouvrir le fifo pour l'entrée se bloque. Essayer
et vous ne verrez rien. Utilisez plutôt, par exemple,
qui ouvre le fifo pour lire et écrire en tant que stdin, puis le dups à stdout.
Le suivi de la commande bash complète montre que ni l'ouverture en lecture ni en écriture ne revient (jusqu'à ce que l'ouverture opposée soit terminée):
la source