一、介绍
进程通信中的有名管道(fifo)与无名管道(pipe)
特点 | fifo | pipe |
使用场景 | 任意进程之间 | 具有亲缘的进程 |
通信 | 全双工 | 半双工 |
定位 | 不支持 | 不支持 |
长度上限 | 4K | 4K |
二、相关函数接口
1、pipe
头文件<stdio.h>
1、打开
int pipe(int fildes[2]);
返回值:
成功:0
失败:-1
参数:
fildes[0]:读取句柄
fildes[1]:写入句柄
2、关闭
close(fildes[0]);
close(fildes[1]);
3、读取
ssize_t read(int fd, void *buf, size_t count);
返回值:
成功:返回读取长度
失败:-1
参数:
fd:文件描述符
buf:读取保存空间
count:读取长度
3、写入
ssize_t write(int fd, const void *buf, size_t count);
返回值:
成功:写入长度
失败:-1
参数:
fd:文件描述符
buf:写入内容
count:写入长度
2、fifo
头文件
<sys/types.h>
<sys/stat.h>
1、创建管道
int mkfifo(const char *pathname, mode_t mode);
返回值:
成功:0
失败:-1
参数:
pathname:管道文件路径
mode:创建管道文件访问权限
2、卸载管道
int unlink(const char *pathname);
返回值:
成功:0
失败:-1
参数:
pathname:管道文件路径
3、打开
int open(const char *pathname, int flags);
返回值:
成功:文件描述符
失败:-1
参数:
pathname:文件路径
flags:文件操作标志
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
4、读取
ssize_t read(int fd, void *buf, size_t count);
返回值:
成功:返回读取长度
失败:-1
参数:
fd:文件描述符
buf:读取保存空间
count:读取长度
5、写入
ssize_t write(int fd, const void *buf, size_t count);
返回值:
成功:写入长度
失败:-1
参数:
fd:文件描述符
buf:写入内容
count:写入长度
6、关闭
close(fd);