命名管道,和匿名管道,有了自己的名字,有了名字就可以操作。所以他不在局限于有血缘关系的两个进程之间,适用于任意的两个进程。
实际上和匿名管道一样是一块内核中的缓存,和匿名管道不一样的是,他在文件系统中多了文件,而匿名管道的文件只存在与内存中,但是命名管道的文件虽然存在,有在内核数据结构中有自己的环境,但是在内核中的结点并没有存在数据块,数据的信息和缓存是同步的。
特性:
简单,在任意两个进程里想要通信的时候,只要使用操作文件的方式就可以(提前创建一个fifo文件)
读写操作:
还没有建立起来一个完整管道时,调用read会阻塞。
还没有建立起来一个完整管道时,调用write会阻塞。
建立起来后,关闭读端,写write,会有SIGPIPE信号。
建立起来后,关闭写端,读read,会返回0表示读完了。
完整的管道时,往已满的管道写会阻塞。
完整的管道时,读已空的管道时会阻塞。
创建fifo文件的函数:
int mkfifo(const char*pathname,mode_t mode);
指定路径和权限创建一个fifo文件,成功返回0,失败返回-1,并且设置erron。
使用文件的操作去使用fifo文件,实现通信。