2012-11-24 96 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

我们在这里帮助传播知识,而不是竞争。 –