私はしばらくそれを操作するために努力してきたので、配管がどのように機能するかについての根本的な誤解が私の問題の根本的な原因であると思います。
私の目標は、いくつかのリモートホストへのTCP接続を開始しnetcat
、ファイルシステムに2つの名前付きパイプを持つことです。あるプロセスは着信データを読み取ることができ、もう一方のプロセスは発信データとして書き込むことができます。現在、次の構造を使用しています。
mkfifo in
mkfifo out
cat out | netcat foo.bar.org 4000 > in &
ここでは、他のプロセスがこのオープンTCP接続を読み書きできるようにしたいと思います。これが「ただ動作」する必要がありますか、それともこのような設定が機能しないのですか?
何〜らしい現在起こっていることはout
問題なく読むことができますが、書き込むとin
パイプが切れたという内容の出力が出て以来のすべての通信が中断されたようです。アイデア?
(関連:元々使用したもの:
netcat foo.bar.org 4000 < out > in &
しかし、入力待機をブロックすることがわかりました。私もこれについて疑問に思います。しかし、別の質問で解決するのが最善です。 )
ベストアンサー1
cat out | netcat foo.bar.org 4000 > in &
問題はcat
、一度パイプEOF
からout
受信すると終了することです。終了すると、残りcat
のパイプライン(含むnetcat
)も終了します。
次のようにしてみてください。
while true; do cat out; done | netcat foo.bar.org 4000 > in &
したがって、cat
必要に応じて頻繁に再開され、パイプラインEOF
で発生するすべての問題がout
効率的に処理されます。