名前付きパイプは、ファイルシステム内のFIFOファイルが表示され、その他のファイルを読み書きできるように呼ばれています!
名前付きパイプの機能:
- データを読むために何のプロセスが存在しない場合は、パイプへの書き込みデータの書き込み処理は、書き込み処理を詰まらせることができた場合
- 時間のデータパイプラインを読み出す場合、存在する場合はデータの読み出し処理がブロックされません
- 書き込み処理がブロックされている場合は、データを読み込むための読み込みプロセス、正常に戻っを書くプロセスがあります
-
読み取り処理がブロックされている場合は書き込み処理がデータを書き込む場合は、その後、読み取り処理は、データを読み取り、その後、通常の背後にあるコードを実行します
# 写进程堵塞的情况 [root@ns_10.2.1.242 test]$ echo 1 >p & [1] 17091 [root@ns_10.2.1.242 test]$ jobs [1]+ Running echo 1 > p & [root@ns_10.2.1.242 test]$ cat p 1 [1]+ Done echo 1 > p [root@ns_10.2.1.242 test]$ jobs [root@ns_10.2.1.242 test]$ # 读进程堵塞的情况 [root@ns_10.2.1.242 test]$ cat p & [1] 17351 [root@ns_10.2.1.242 test]$ jobs [1]+ Running cat p & [root@ns_10.2.1.242 test]$ echo 2 > p 2 [root@ns_10.2.1.242 test]$ jobs [1]+ Done cat p
このような背景の中、バックアッププロセスとして異なるプロセス間通信でパイプの役割を名前付き、その後、別のプロセスを実行し、バックアップのための待ち時間が完了したものは、対応に対処することになるでしょう!
コマンドパイプラインを作成します。
$ mkfifo /tmp/testpipe
$ mknod /tmp/testpipe p
以下は、名前付きパイプのアプリケーションの一例です:
次のようにreader.shは、パイプラインの内容をお読みください。
#!/bin/bash
# filename: reader.sh
# 逐行读取管道中的内容
pipe=/tmp/testpipe
trap "rm -f $pipe" EXIT if [[ ! -p $pipe ]]; then mkfifo $pipe fi while true do if read line <$pipe; then if [[ "$line" == 'quit' ]]; then break else echo $line fi fi done echo "Stop reader...."
次のようにwriter.sh、パイプラインにデータを書き込みます:
#!/bin/bash
# writer.sh
# 把当前进程的pid写到管道
pipe=/tmp/testpipe
if [[ ! -p $pipe ]]; then echo "Reader not running" exit 1 fi if [[ "$1" ]]; then echo "$1" >$pipe else echo "Hello from $$" >$pipe fi
リーダライタのコールの例:
[root@ns_10.2.1.242 test]$ sh reader.sh &
[1] 17053
[root@ns_10.2.1.242 test]$ sh writer.sh test test [root@ns_10.2.1.242 test]$ sh writer.sh Hello from 17057 [root@ns_10.2.1.242 test]$ sh writer.sh quit stop Reader [root@ns_10.2.1.242 test]$ sh writer.sh quit Reader not running [1]+ Done sh reader.sh [root@ns_10.2.1.242 test]$ sh writer.sh quit
シェルは、$$
現在のプロセスIDであります
NCAT作HTTPサーバ:
名前付きパイプは、ファイルシステム内のFIFOファイルが表示され、その他のファイルを読み書きできるように呼ばれています!
名前付きパイプの機能:
- データを読むために何のプロセスが存在しない場合は、パイプへの書き込みデータの書き込み処理は、書き込み処理を詰まらせることができた場合
- 時間のデータパイプラインを読み出す場合、存在する場合はデータの読み出し処理がブロックされません
- 書き込み処理がブロックされている場合は、データを読み込むための読み込みプロセス、正常に戻っを書くプロセスがあります
-
読み取り処理がブロックされている場合は書き込み処理がデータを書き込む場合は、その後、読み取り処理は、データを読み取り、その後、通常の背後にあるコードを実行します
# 写进程堵塞的情况 [root@ns_10.2.1.242 test]$ echo 1 >p & [1] 17091 [root@ns_10.2.1.242 test]$ jobs [1]+ Running echo 1 > p & [root@ns_10.2.1.242 test]$ cat p 1 [1]+ Done echo 1 > p [root@ns_10.2.1.242 test]$ jobs [root@ns_10.2.1.242 test]$ # 读进程堵塞的情况 [root@ns_10.2.1.242 test]$ cat p & [1] 17351 [root@ns_10.2.1.242 test]$ jobs [1]+ Running cat p & [root@ns_10.2.1.242 test]$ echo 2 > p 2 [root@ns_10.2.1.242 test]$ jobs [1]+ Done cat p
このような背景の中、バックアッププロセスとして異なるプロセス間通信でパイプの役割を名前付き、その後、別のプロセスを実行し、バックアップのための待ち時間が完了したものは、対応に対処することになるでしょう!
コマンドパイプラインを作成します。
$ mkfifo /tmp/testpipe
$ mknod /tmp/testpipe p
以下は、名前付きパイプのアプリケーションの一例です:
次のようにreader.shは、パイプラインの内容をお読みください。
#!/bin/bash
# filename: reader.sh
# 逐行读取管道中的内容
pipe=/tmp/testpipe
trap "rm -f $pipe" EXIT if [[ ! -p $pipe ]]; then mkfifo $pipe fi while true do if read line <$pipe; then if [[ "$line" == 'quit' ]]; then break else echo $line fi fi done echo "Stop reader...."
次のようにwriter.sh、パイプラインにデータを書き込みます:
#!/bin/bash
# writer.sh
# 把当前进程的pid写到管道
pipe=/tmp/testpipe
if [[ ! -p $pipe ]]; then echo "Reader not running" exit 1 fi if [[ "$1" ]]; then echo "$1" >$pipe else echo "Hello from $$" >$pipe fi
リーダライタのコールの例:
[root@ns_10.2.1.242 test]$ sh reader.sh &
[1] 17053
[root@ns_10.2.1.242 test]$ sh writer.sh test test [root@ns_10.2.1.242 test]$ sh writer.sh Hello from 17057 [root@ns_10.2.1.242 test]$ sh writer.sh quit stop Reader [root@ns_10.2.1.242 test]$ sh writer.sh quit Reader not running [1]+ Done sh reader.sh [root@ns_10.2.1.242 test]$ sh writer.sh quit
シェルは、$$
現在のプロセスIDであります
NCAT作HTTPサーバ: