Linux面试题之管道

231 阅读1分钟

最近看书,遇到一道关于Linux管道的面试题,觉得比较经典,拿出来分析分析。 题目是这样的,简述下面的脚本:

mkfifo pipe1   
mkfifo pipe2   
echo -n run | cat - pipe1 > pipe2 &  
cat < pipe2 > pipe1  

废话不多说,直接上答案。

这个脚本的作用是创建两个命名管道,然后用cat命令在它们之间传输数据。具体来说:

  • mkfifo pipe1 是创建一个名为pipe1的命名管道。命名管道是一种特殊的文件,可以用来在不同的进程之间传输数据 [1] 。
  • mkfifo pipe2 是创建另一个名为pipe2的命名管道。
  • echo -n run | cat - pipe1 > pipe2 & 是在后台运行一个命令,它的作用是把字符串"run"和pipe1的内容一起输出到pipe2。其中,echo -n run 是输出"run"字符串,不换行;| 是管道符号,表示把前面的输出作为后面的输入;cat - pipe1 是把标准输入和pipe1的内容一起输出;> pipe2 是把输出重定向到pipe2;& 是让命令在后台运行,不阻塞当前的shell。
  • cat < pipe2 > pipe1 是运行另一个命令,它的作用是把pipe2的内容输出到pipe1。其中,< pipe2 是把pipe2的内容作为输入;> pipe1 是把输出重定向到pipe1。

这样,就形成了一个循环,每次执行完cat < pipe2 > pipe1后,就会触发后台的cat - pipe1 > pipe2再次执行,反复地在两个管道之间传输数据。这个脚本可以用来测试命名管道的功能或者模拟某些场景 [2] 。