LinuxのBashで名前付きパイプを使用する簡単な例を投稿できますか?
名前付きパイプの実際の使用の最良の例の1つ...
http://en.wikipedia.org/wiki/Netcat から:
別の便利な動作は、
netcat
をプロキシとして使用することです。ポートとホストの両方をリダイレクトできます。この例を見てください:nc -l 12345 | nc www.google.com 80
ポート12345は要求を表します。
これにより、ポート12345で
nc
サーバーが起動し、すべての接続がgoogle.com:80
にリダイレクトされます。 Webブラウザーがnc
に要求を行うと、要求はgoogleに送信されますが、応答はWebブラウザーに送信されません。これは、パイプが単方向であるためです。これは、入力と出力をリダイレクトする名前付きパイプで回避できます。mkfifo backpipe nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe
2つの異なるシェルを開き、それらを並べたままにします。両方で、/tmp/
ディレクトリに移動します。
cd /tmp/
最初のタイプでは:
mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe
2番目の行では、次を入力します。
while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe
最初のシェルでは、2番目のシェルでコードの2番目の部分を実行するまで、プロンプトは表示されません。 fifoの読み取りと書き込みがブロックされているためです。
ls -al myPipe
を実行してFIFOタイプを確認し、この特定のタイプのファイルの詳細を確認することもできます。
次のステップは、コードをスクリプトに組み込むことです!
コマンドは次のとおりです。
$ mkfifo named_pipe
$ echo "Hi" > named_pipe &
$ cat named_pipe
最初のコマンドはパイプを作成します。
2番目のコマンドは、パイプに書き込みます(ブロッキング)。 &
はこれをバックグラウンドに配置するため、同じシェルでコマンドを入力し続けることができます。次のコマンドでFIFOが空になったときに終了します。
最後のコマンドはパイプから読み取ります。
ターミナル1:
$ mknod new_named_pipe p
$ echo 123 > new_named_pipe
ターミナル2:
$ cat new_named_pipe
$ 123
$
new_named_pipe
には受信側と書き込み側の両方が存在するため、情報とブロッキング停止が表示されます名前付きパイプはLinuxのあらゆる場所で使用されます。ls -l
コマンドで表示されるcharおよびblockファイルのほとんどは、charおよびblockパイプです(これらはすべて/ devにあります)。これらのパイプは、ブロックおよび非ブロックにすることができ、主な利点は、IPCの最も簡単な方法を提供することです。