Linux 使用cat在管道之间反弹角色
我一直在读linux中的管道,我在一本书(第16页)中发现了这一点 首先,他们用mkfifo创建了四个管道Linux 使用cat在管道之间反弹角色,linux,bash,shell,unix,pipe,Linux,Bash,Shell,Unix,Pipe,我一直在读linux中的管道,我在一本书(第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 >pipe3
$ mkfifo pipe33a pipe33b pipe42a pipe42b
将/bin/cat复制到./
$ cp /bin/cat proj33 && cp /bin/cat proj42
然后运行以下命令
$ echo -n x | ./proj33 - pipe33a > pipe33b
$ ./proj33 <pipe33b >pipe33a &
$echo-nx |/proj33-pipe33a>pipe33b
美元/项目33管道33A&
本书将最后一个命令解释为
上面看到的命令将创建两个使用
cat在pipe33a和pipe33b之间反弹x字符
我的问题是我不明白最后一个命令。特别是为什么在./proj33和pipe33a之间使用“-”。“-”是做什么的。这个设置如何像一个交换字符“x”的无限循环?命令中的
-
意味着cat
(或您的副本,proj33
)从标准输入读取。因此proj33
将标准输入和pipe33a
的内容连接起来,发送到pipe33b
proj33
的第二个实例读取pipe33b
(即第一个实例的输出),并将输出发送到pipe33a
(即返回第一个实例)
第一个命令中的-
用于启动流程,允许您将字符回送到循环中。说明:
注意:为了清楚起见,我将调用进程cat1和cat2,而不是proj33
echo-nx
输出字符“x”并将其馈送到cat1
,这只是cat命令的副本
cat1-pipe33a>pipe33b
:首先读取stdin(这就是-
的意思)并将其写入pipe33b
。然后cat1尝试从pipe33a
读取数据,它必须等待
cat2-pipe33a&
从pipe33b
中读取“x”,并将其写回pipe33a
cat1现在可以从pipe33a
读取“x”,并将其写入pipe33b
重新开始整个过程
-
通常是指依赖于上下文的标准输入或输出,例如echo 1 | cat file->file.out
将标准输入附加到file
中的内容,并将其写入file.out
,而cat-file
将首先接受标准输入。“它必须等待”,关键字!谢谢你!。在第一个命令(cat1)之后和cat2之前,我也尝试了ps aux | grep$cat1pid
,它处于睡眠状态。在我运行第二个命令后,它开始运行。