Linux进程间通信第二讲 管道PIPE FIFO
来源:http://www.tudoupe.com时间:2022-02-26
管道是最古老的IPC之一, 以管道文件作为媒介进行传输
其中分为有名管道和无名管道
无名管道的管道文件在文件系统中不可见, 而有名可见
管道通信实质上是内存通信, 由内核负责
一、无名管道(PIPE)
只能用于亲缘关系的进程(父子 、 兄弟), 由它的机制决定
无名管道的管道文件在文件系统中不可见
使用方法:
1、父进程调用pipe() 函数创建无名管道, 无名管道有读端 、 写端
2、用fork产生子进程, 子进程自动继承父进程的描述符 ,也就是 无名管道的 读端 、 写端
3、这是一种半双工通信, 一条管不能同时又进又出,想 读,就把写关了,另一边就把写关了,读就开 , 如下图所示

1.1 父子通信
首先父进程创建一个无名管道 , 有读、写描述符
然后fork 后产生一个子进程,它和父进程称为父子进程
这个子进程继承了父进程的读、写描述符
下面代码,子进程是写,所以要关掉读 ; 父进程是读,所以要关掉写
代码如下(pipe、父子进程):
1.2 兄弟通信
父进程创建了 读、写 描述符
fork 两次后产生了两个子进程(互为兄弟进程),它们都继承父进程的 读、写 描述符
在这里,父进程不参与通信,因此父进程的读、写描述符都需要关闭掉
下面的代码,子1是写,所以关掉读 ; 子2是读,所以关掉写
代码如下(pipe、兄弟进程):
二、有名管道(FIFO)
用于所有进程的通信,不局限父子、兄弟进程
有名管道在文件系统中是可见,虽然可见, 但是是在内存当中
使用方法:
1、进程1创建一个有名管道文件,可以在文件系统中看到, 然后和它通信的进程2打开这个文件即可通信
2、没有读、写描述符, 这里只有文件描述符,用它进行读或写
3、这里也是一个半双工通信
例如进程1创建管道文件、然后打开文件获取文件描述符、接着进行用描述符来读管道文件
代码如下(fifo、读):
而进程2不需要创建管道文件, 打开进程1创建的并获取文件描述符、接着进行用描述符来写管道文件
代码如下(fifo、写):
Linux进程间通信第二讲 管道PIPE FIFO - 知乎 (zhihu.com)
上一篇:【CV】pycharm中的报错
下一篇:Kafka 分布式安装部署
相关新闻
- 2023-05-06 微pe怎么初始化U盘(微pe怎么恢复初
- 2023-05-06 Xp系统boot 进入pe(boot manager 怎么进入
- 2023-05-06 win pe修复bcdboot(pe修复系统)
- 2023-05-06 win7更新失败 pe(win7更新失败还原更
- 2023-05-06 u盘装了pe读取不了(u盘能进pe读取不
- 2023-05-06 u盘pe 发热(u盘发热烫手)
- 2023-05-06 u盘pe下看不到硬盘(u盘启动pe看不到
- 2023-05-06 pe盘 ntfs(u盘ntfs格式)
- 2023-05-06 sony笔记本进入pe模式(联想笔记本怎
- 2023-05-06 pe启动盘进不去(pe启动盘进不去系统
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
