2012-11-24 176 views
0

我有一個問題,理解這個命令: 在終端mkfifo pipe1mkfifo pipe2 做和執行後:Unix的cat命令和FIFO

  1. $ echo -n x | cat - pipe1 > pipe2 &

    我得到的結果:

    [1] 3526 
    

    往往會隨着時間的推移而增加的數字。

    當我運行:

  2. $ cat <pipe2 > pipe1

    輸出爲:

    $ echo -n x | cat - pipe1 > pipe2 & 
    

有人能解釋發生了什麼?

  1. 據我所知,第一個命令應創建與pipe2 X + PIPE1內容的新文件,然後那是什麼輸出,如果pipe2已經存在,因爲與mkfifo創建那麼會發生什麼?
  2. 我不知道第二個命令是幹什麼的。我無法在網上找到任何參考。

這是一個家庭作業,我們還沒有看到類;任何幫助,將不勝感激。

回答

5

每個命令:

echo -n x | cat - pipe1 > pipe2 & 

運行命令序列,使得echo輸出被管道輸送到cat但序列在後臺運行。殼產生一條消息,如:

[1] 3526 

以指示該後臺作業是作業ID 1和進程ID 3526.由於FIFO的性質的,子殼作爲整體被掛上等待某事打開pipe2進行讀取,然後才能成功啓動cat操作。一旦發佈, cat命令從標準輸入讀取一個字符,然後掛起等待來自pipe1的某些輸入。嚴格來說,這意味着,它會等待一個過程打開pipe2進行書寫。

當您重複該命令時,數字會增加,因爲作業編號和進程ID是唯一的。

cat pipe1本身應該掛起。回顯的命令可能來自之前的一些命令完成。

$ echo -n x | cat - pipe1 > pipe2 & 
[1] 9304 
$ (echo Hi > pipe1) & 
[2] 9305 
$ sleep 3 
$ jobs 
[1]- Running     echo -n x | cat - pipe1 > pipe2 & 
[2]+ Running     (echo Hi > pipe1) & 
$ cat pipe2 
-n x 
Hi 
[1]- Done     echo -n x | cat - pipe1 > pipe2 
[2]+ Done     (echo Hi > pipe1) 
$ 

我的殼(科恩)不解釋echo -n和你的一樣(可能bash)。

+1

感嘆。 ** + 1 **。一旦Jonathan Leffler發佈了答案,回答問題就沒有多大意義。 – ghoti

+0

我們在這裏幫助傳播知識,而不是競爭。 –