Я вже деякий час морочуся з тим, щоб це працювало, тому я підозрюю, що якихось принципових непорозумінь щодо того, як працюють труби, є першопричиною моїх проблем.
Моя мета - ініціювати підключення TCP до якогось віддаленого хоста через netcat
та мати дві іменовані канали у файловій системі: таку, з якої процеси можуть читати, щоб отримувати вхідні дані, та іншу, що процеси можуть записувати, які служать вихідними даними. Зараз я використовую таку конструкцію:
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
Звідси я хочу дозволити іншим процесам читати та записувати в / з цього відкритого TCP-з'єднання. Чи повинно це "просто працювати", чи є причина, чому така конструкція не може працювати?
Зараз, здається, трапляється те, що я можу читати з out
без проблем, але коли я пишу, in
я отримую вихід із згадкою про розбиту трубу, і все подальше спілкування видається мертвим. Думки?
(Пов'язано: Спочатку я використовував:
netcat foo.bar.org 4000 < out > in &
але виявив, що він блокує очікування введення. Мені також цікаво з цього приводу, але, напевно, краще вирішуватись в окремому питанні.)
write(stdout): Broken pipe
після (або незабаром після) написання наout
трубу.