管道时UNIX系统最古老的进程间通信方式(基本不再使用),历史上的管道通常时半双工(只允许单向数据流动),现在的系统大都可以全双工,数据可以双向流动。
1、有名管道(建立实体文件)
命令:mkfifo
函数:int mkfifo(const char* pathname,mode_t mode);
功能:创建管道文件
Pathname:文件路径
Mode:权限
返回值:文件描述符
返回值:成功返回0,失败返回-1
编程模型:
进程A 进程B
创建管道(mkfifo) …….
打开管道(open) 打开管道
读/写管道(read/write) 读/写数据
关闭管道(close) 关闭管道
删除管道 (unlink) …….
2、无名管道(用于fork创建的父子进程之间通信)
Int pipe(int pipefd[2]);
功能:创建无名管道
pipefd用来存储内核返回的文件描述符
Pipefd[0[ 用于读操作
Pipefd[1]用来写操作
有名管道:通过int mkfifo(const char* pathname,mode_t mode);创建两个文件描述符fd[0] fd[1]
通过这个文件描述符进行读写
无名管道:通过pipe函数创建一个文件名进程,进程A和进程B对其进行读写,但是同一时刻只能一个进程读一个进程写