一 无名管道:
特点: 具有亲缘关系的进程间通信,但不只指父子进程之间哦。
(1)无名管道的创建
int pipe(int pipefd
參数:
pipefd 数组的首地址
返回值:
成功返回0,失败返回-1
注意:
无名管道存在内核空间。创建成功会给用户空间两个文件描写叙述符,fd[0]:读管道 fd[1]:写管道
思考:为什么无名管道仅仅能用于亲缘关系间进程通信?
由于仅仅有具有亲缘关系的进程存在数据拷贝 [复制文件描写叙述符]
二。有名管道
特点:
(1)随意进程间通信
(2)文件系统中存在文件名称
<1>创建有名管道文件
int mkfifo(const char *pathname, mode_t mode);
參数:
@pathname 文件名称
@mode 指定的权限
返回值:
成功返回0,失败返回-1
<2>打开有名管道文件
open
注意:
一个进程以仅仅读方式打开管道文件。则堵塞,直到还有一个进程以写的方式打开管道文件
一个进程以仅仅写方式打开管道文件。则堵塞,直到还有一个进程以读的方式打开管道文件
<3>读写管道
read / write
以下加上一个管道之间通信的样例:
负责从管道中读
<pre name="code" class="cpp"> <pre name="code" class="cpp">#include <head.h> int read_fifo(int fd) { int n; char buf[1024]; while(1) { n = read(fd,buf,sizeof(buf) - 1); buf[n] = '