使用cat在管道之间弹回一个字符

时间:2016-06-27 12:34:33

标签: linux bash shell unix pipe

我一直在阅读Linux中的管道,我在一本书中看到了这一点(http://linux-training.be/linuxsys.pdf,第16页)

首先,他们用mkfifo

创建了四个管道
$ mkfifo pipe33a pipe33b pipe42a pipe42b

将/ bin / cat复制到./

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

然后运行以下命令

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

这本书将最后一个命令解释为

  

您在上面看到的命令将创建两个使用的proj33进程   cat在pipe33a和pipe33b之间反弹x字符。

我的问题是我不明白最后一个命令。特别是在./proj33和pipe33a之间使用' - '的原因。什么' - '做。这种设置如何像一个交换“x”的无限循环?

2 个答案:

答案 0 :(得分:4)

说明: 请注意,为了清楚起见,我将调用进程cat1和cat2而不是proj33。

  1. echo -n x输出字符&#39; x&#39;并将其提供给cat1,这只是cat命令的副本。
  2. cat1 - pipe33a > pipe33b:首先读取标准输入(-表示的意思)并将其写入pipe33b。然后cat1尝试从pipe33a读取,它必须等待。
  3. cat2 <pipe33b >pipe33a &阅读&#39; x&#39;超出pipe33b并将其写回pipe33a
  4. cat1现在可以阅读&#39; x&#39;退出pipe33a并将其写回pipe33b,重新开始整个过程​​。

答案 1 :(得分:2)

命令中的-表示cat(或您的副本,proj33)从标准输入读取。因此,proj33会将标准输入与pipe33a的内容联系起来,并将其发送到pipe33b

proj33的第二个实例从pipe33b读取(即第一个实例的输出)并将输出发送到pipe33a(即返回第一个实例)。

第一个命令中的-需要启动过程,允许您echo一个字符进入循环。