Linux学习(11)进程间通信(IPC)3-共享内存与消息队列

本节学习内容

1.共享内存基本概念

2.共享内存的创建(共享内存使用必须伴随信号量使用)

3.消息队列基本概念

4.消息队列的创建

一、共享内存的基本概念

原理:共享内存是先在物理内存上申请一片空间,多个进程可以将其映射到自己的虚拟地址空间中,所有进程都可以访问共享内存(与共享内存建立连接(映射))

所需头文件:sys/shm.h

原理图:

 共享内存相关接口函数

(1)shmget()用于创建或获取共享内存          (2)shmat()将共享内存空间映射到进程的虚拟地址

(3)shmdt()断开当前进程指向的共享内存    (4)shmctl()控制共享内存

二、代码创建共享内存

进程shm.c创建共享内存并向其输入数据代码如下

 

 进程pshm.c打开所创建的共享内存并读取共享内存中的数据代码如下

控制同一时刻只能有一个进程访问共享内存的信量代码如下

sem.h文件

 sem.c文件

 

 

 

运行结果如下:

 结果总结:如上我们能看到,通过信号量控制共享内存,一个进程向共享内存中写数据(该进程写入时,其余进程不能与共享内存建立连接),写入后,另一个进程在共享内存中读数据(读取时,第一个进程与共享内存先断开连接,该进程与共享内存建立连接,读取后,与共享内存断开连接,重复此过程)

三、消息队列基本概念

消息队列头文件:sys/msg.h

(1)消息队列的创建在内存中

(2)定义消息队列结构体时第一个成员类型为长整型(long int),用来保存消息类型(类型值要>=1)

(3)计算消息大小时不用算类型所占字节

(4)消息队列读取时,0号消息代表可以读任意类型消息

消息队列相关接口函数:

msgget()用于创建或获取一个消息队列         msgsnd()发送一条消息

msgrcv()接收一条消息                                   msgctl()控制消息队列

(5)ipcs -q显示系统中存在的消息队列

四、代码实现消息队列

发送消息队列的进程

接收消息的进程

 

 代码运行如下,我们开始没有消息队列,我们通过msg文件向系统发送3个消息队列

然后,通过pmsg接收消息队列

 

实现成功 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值