进程通信方式-IPC
管道概述
-
分类:
- 匿名管道
- 有文件实体
- 匿名管道只能在具有公共祖先的进程(父进程与子进程,或者两个兄弟进程,具有亲缘关系)之间使用。
- 有名管道:
- 有文件实体, 但不存储数据
- 可以在有关系,或无关的进程之间使用
- 匿名管道
-
本质:内核内存中维护的缓冲器
-
通信方式:半双工通信
-
数据结构:循环队列
系统调用
- 创建匿名管道:
int pipe(int pipefd[2]) - 查看管道缓冲大小函数:
long fpathconf(int fd, int name) - 创建有名管道:
int mkfifo(const char *pathname, mode_t mode)
int pipe(int pipefd[2])
功能
创建一个匿名管道,用来进程间通信。
头文件
#include <unistd.h>
参数
-
int pipefd[2]:这个数组是一个传出参数。-
pipefd[0]对应的是管道的读端 -
pipefd[1]对应的是管道的写端
-
返回值
- 成功 0
- 失败 -1
int mkfifo(const char *pathname, mode_t mode)
功能
创建有名管道:fifo文件
头文件
#include <sys/types.h>
#include <sys/stat.h>
参数
pathname: 管道名称的路径mode: 文件的权限 和 open 的 mode 是一样的,是一个八进制的数
返回值
- 成功返回0
- 失败返回-1,并设置错误号