一、无名管道
1、特点
1)只能用于亲缘关系间的通信
2)半双工通信模式,拥有读端与写端
3)管道是一种特殊的文件,对它的读写可以使用文件IO,如read,write
4)管道是基于文件描述符的通信方式。当一个管道建立时,它会创建两个文件描述符fd[0](读管道)与fd[1](写管道)
5)不支持sleek操作
2、读写特性
1)管道中无数据时,读操作阻塞
2)管道满时(64k),写操作会阻塞
3)只有在管道的读端存在时,向管道中写入数据才有意义,否则会导致管道破裂
3、函数
#include <unistd.h>
int pipe(int fd[2])
功能:创建无名管道
参数:文件描述符 fd[0]:读端 fd[1]:写端
返回值:成功 0
失败 -1
示例:
二、有名管道
1、特点
1)有名管道可以让两个互不相关的进程之间相互通信
2)有名管道通过路径名来表示,并且在文件系统中可见,但是内容存放在内存中
3)进程通过文件IO来操作有名管道
4)遵循先进先出原则
5)不支持sleek操作
2、读写特性
1)只写方式,写阻塞(阻塞在文件打开位置),一直到另一个进程把读打开
2)只读方式,读阻塞(阻塞在文件打开位置),一直到另一个进程把写打开
3)可读可写,如果管道中没有数据,读阻塞
3、函数
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *filename,mode_t mode);
功能:创建有名管道
参数:filename:有名管道文件名
mode:权限
返回值:成功:0
失败:-1,并设置errno号
示例:
有名管道与无名管道的区别:
无名管道 |
有名管道 |
|
使用场景 |