He estado jugando con hacer que esto funcione por un tiempo, así que sospecho que algún tipo de malentendido fundamental sobre cómo funcionan las tuberías es la causa principal de mis problemas.
Mi objetivo es iniciar una conexión TCP a algún host remoto a través de netcat
y tener dos canales con nombre en el sistema de archivos: uno que los procesos puedan leer para obtener datos entrantes, y otro que los procesos puedan escribir para que sirvan como datos salientes. Actualmente estoy usando la siguiente construcción:
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
Desde aquí, me gustaría permitir que otros procesos lean y escriban en / desde esta conexión TCP abierta. ¿Debería esto "simplemente funcionar", o hay una razón por la cual una construcción como esta no puede funcionar?
Lo que parece suceder en este momento es que puedo leer out
sin problemas, pero cuando escribo in
me sale un mensaje que menciona una tubería rota y toda la comunicación posterior parece estar muerta. Pensamientos?
(Relacionado: originalmente usé:
netcat foo.bar.org 4000 < out > in &
pero encontró que bloquea la espera de entrada. Tengo curiosidad por esto también, pero probablemente se aborde mejor en una pregunta separada).
write(stdout): Broken pipe
después (o poco después) de escribir en laout
tubería.