2016-06-27 8 views
3

間の文字をバウンスする猫と使用Iは、Linuxでのパイプについて読んでてきたパイプ

まず、彼らははmkfifo

$ mkfifo pipe33a pipe33b pipe42a pipe42b 
を持つ4本のパイプを作成します./

$ cp /bin/cat proj33 && cp /bin/cat proj42 

コピー/ binに/猫は、その後、次のコマンドを実行します

$ echo -n x | ./proj33 - pipe33a > pipe33b 
$ ./proj33 <pipe33b >pipe33a & 

本は

あなたはpipe33aとpipe33b間のx文字をバウンスする 猫を使用する2つのproj33プロセスを作成します上記参照コマンドとして最後のコマンドについて説明します。

私の問題は最後のコマンドを理解できないことです。特に./proj33とpipe33aの間に ' - 'が使用される理由。 ' - 'は何をしますか?そしてこの設定は、チャーティアな「x」を交換する無限ループのようにどのように機能しますか?

+2

'man cat' ...... –

+3

' -'は通常、コンテキストに依存する標準入力または出力を表します。 'echo 1 | catファイル - > file.out'は 'file'の内容に標準入力を追加し、' file.out'に書き出しますが、 'cat-file'は最初に標準入力を受け取ります。 – andlrc

答えて

3

説明: わかりやすくするために私はproj33ではなくプロセスcat1とcat2を呼び出すつもりです。

  1. echo -n xは、文字「X」を出力し、catコマンドの単なるコピーであるcat1に供給する。
  2. cat1 - pipe33a > pipe33b:最初にstdin(これは-の意味です)を読み取り、pipe33bに書き込みます。 cat1はpipe33aからの読み取りを試み、それは待たなければなりません。
  3. cat2 <pipe33b >pipe33a &pipe33bの外に「X」を読み込み、CAT1
  4. pipe33aに外に書き戻すには、今 pipe33aのうち、背面の「x」を読んで、もう一度上の全プロセスを開始 pipe33bに出戻ってそれを書き込みすることができます。
+2

"それは待たなければなりません"、キーワード!ありがとうepicbrew !.最初のコマンド(cat1)の後とcat2の前に、私は 'ps aux | grep $ cat1pid'も試してみて、それは眠っていました。私は2番目のコマンドを実行した後、それは実行を開始しました。 – raghulmz

2

コマンドの-は、cat(またはそのコピー、proj33)が標準入力から読み込むことを意味します。したがって、proj33は標準入力とpipe33aの内容を連結し、pipe33bに送信します。

の2番目のインスタンスは、pipe33b(つまり、最初のインスタンスの出力)から読み取り、出力をpipe33a(つまり、最初のインスタンスに戻します)に送信します。

最初のコマンドには-が必要です。プロセスを開始するために、echo文字をループに入れることができます。

関連する問題