进程第六章:进程间通信

一、铺垫

1.进程间通信的本质是对共享资源(同一块资源)进行操作;

2.匿名管道是具有血缘关系的进程对共享资源的操作;所以只能先创建,再采用fork()函数,创建父子进程,对管道进行操作;

3.匿名管道是提供字节流式服务;也就是说,可以用read和write进行操作;

4.匿名管道的生命周期是跟随进程的,进程退出,意味着管道的释放;

5.匿名管道是半双工的—数据只能向一个方向流动,需要双方通信时,必须要建立两个管道

6.通信的本质是对同一块资源进行操作(写和读),当有一方关闭了读端或写端;另一方应该怎样应对,才是匿名管道通信需要着重解决的本质问题

二、匿名管道

管道(什么是管道):

1.管道是Unix中最古老的进程间通信的形式。
2.我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”
函数:
#include <unistd.h>
功能:创建一无名管道
原型
int pipe(int fd[2]);
参数
fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端
返回值:成功返回0,失败返回错误代码

三、匿名管道的几种情况

1.写端正在写入,读端关闭

读端关闭,写端在写数据,也就没了意义,写进程退出;

2.读端正在读取,写端关闭

写端关闭,管道内还有数据,读完数据后,读进程再退出;

3.读端读的慢,写端写的快

写端快,管道一定会被写满;写进程会被阻塞,但是写端不会因为一读取数据,就马上写入,而是缓冲区有了足够的大小,才会写入数据;

4.写端写的慢,读端读的快

读进程会阻塞,直到管道有数据才会读取;

四、命名管道

//程序中创建
int mkfifo(const char *filename,mode_t mode);

第一个参数:代表的是创建的文件名称;

第二个参数:创建的文件所拥有的权限,可读可写可执行,也就是所谓的777;

对文件进行操作,就要使用read和write接口

命令行中创建 

mkfifo filename        //命令

五、system V共享内存

有概念就好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值