命名管道是一种进程间通信的方式,底层原理与匿名管道极为相似,本质是通过在磁盘上新建一个特殊的文件,然后通过这个文件来进行通信
指令: mkfifo [文件名/路径]
该指令用于创建一个命名管道,可以看到文件的类型是p
p 类型 命名管道文件
p文件大小恒为0
可通过echo和cat向其中读写数据
读写是同步的(一端进行读写,而另一端未进行操作时第一端会阻塞)
接口函数:
#include <sys/types.h>
#include <sys/stat.h>int mkfifo(const char *pathname, mode_t mode);
mkfifo用于创建一个命名管道,第一个参数为路径,第二个参数为权限
命名管道本质是一个文件,如果要进行通信,直接open,然后read,write即可
删除命名管道文件接口函数
#include <unistd.h>
int unlink(const char *pathname);
参数为路径这个函数用来删除其他文件,如命名管道文件和文本文件
命名管道多读端与多写端问题
命名管道本质上不应存在多读端
多读端: 读端都会阻塞,写端写入数据后,仅第一个读端读到数据,不过所有读端都取消阻塞
多写端: 写端都会阻塞,读端读数据后按时间顺序读入数据,所有写端取消阻塞
命名管道的优势在于通信进程不需要有关系,直接通过文件路径找到管道文件,其他属性与匿名管道类似