0%

管道文件

管道文件

前面学到过|管道操作符。它的作用是:将|前面的命令的输出作为|后面的命令的输入。

它有两个好处:

  1. 使用方便
  2. 可以用来构建一些功能复杂的命令

但是也有缺点:

  1. 每次使用的时候都会启动一个子shell,造成资源浪费
  2. 功能太简单,只能调用一次

这种管道操作符|又可以称为匿名管道。

这节我们来说一个管道文件,又称为命名管道。它是一个特殊的,实际存在的文件。(在linux中,一切皆是文件。)

创建管道文件

有两个命令可以创建管道文件。

  1. mknod
  2. mkfifo

mknod

1
2
3
[root@vm-101 ~]# mknod fifo p
[root@vm-101 ~]# ll fifo
prw-r--r-- 1 root root 0 5月 6 08:50 fifo # 看到这行的第一个字母了吗?

这样一个管道文件就创建好了。怎么使用呢?

1
2
# 终端1
[root@vm-101 ~]# echo 1 > fifo # 这里会等待,卡住。等待数据被读取。
1
2
3
# 终端2
[root@vm-101 ~]# cat fifo
1 # 读取fifo中的数据后,终端1会退出等待。

mkfifo

1
2
3
[root@vm-101 ~]# mkfifo fifo
[root@vm-101 ~]# ll fifo
prw-r--r-- 1 root root 0 5月 6 09:21 fifo
1
2
3
4
5
6
7
# 终端1
[root@vm-101 ~]# echo 1 > fifo &
[1] 14026
[root@vm-101 ~]# echo 2 > fifo &
[2] 14080
[root@vm-101 ~]# echo 3 > fifo &
[3] 14081
1
2
3
4
5
# 终端2
[root@vm-101 ~]# cat fifo
2
1
3

这里是多次输入,一次全部读出。

用途

  1. 进程之间的通讯
  2. 作为一个简单的队列
  3. mknod功能相对强大。除了这里介绍的功能,还可以创建块设备。