Este es un servidor echo simple en Unix, que usa nc:
mkfifo fifo
cat fifo | nc -k -l 4458 -v | cat >fifo
(basado en esto )
Como puedo ver, el flujo de datos funciona de la siguiente manera:
fifo (my named pipe)
|
| (using cat)
|
v
nc
|
| (using cat)
|
v
fifo
Y aquí está la pregunta: ¿por qué esto no funciona?
nc -k -l 4458 -v >fifo <fifo
Usted se dará cuenta de que si se intenta telnet
con localhost
el 4458
que obtendrá un "Conexión rechazada" error.
cat myfifo | nc -k -l 4458 > myfifo
También funciona. Si usa un archivo de texto, file.txt así,nc -k -l 4458 < file.txt > file.txt
la primera conexión se conectará y cerrará (tiene sentido porque la entrada se truncó y EOF cierra el zócalo), la segunda conexión se convertirá en un servidor de eco olvidadizo: hará eco en cualquier otra línea y guarde las líneas sin eco en el archivo de texto.Respuestas:
Esto se debe a que el comando netcat aún no se ha iniciado. El shell cuando intente abrir el fifo para la entrada se bloqueará. Tratar
y no verás nada En su lugar, use, por ejemplo,
que abre el fifo para leer y escribir como stdin, y luego lo duplica a stdout.
El seguimiento del comando bash completo muestra que ni la apertura para lectura ni la escritura devuelven (hasta que se haga la apertura opuesta):
fuente