入力/出力名前付きパイプを使用したTCP接続

入力/出力名前付きパイプを使用したTCP接続

私はしばらくそれを操作するために努力してきたので、配管がどのように機能するかについての根本的な誤解が私の問題の根本的な原因であると思います。

私の目標は、いくつかのリモートホストへの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効率的に処理されます。

おすすめ記事