Linux进程通信之共享内存

共享内存
共享内存:顾名思义就是允许两个不相关的进程访问同一个逻辑内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。

不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
简单的用一张图来理解:在这里插入图片描述
两个进程A,B,他们都有自己的内存空间,相互不影响,但共享内存就像是一个公共的内存区域,通过声明,访问,映射,就可以让两个进程通过它来相互通信。
主要思路:
1.创建共享内存,打开:shmget
2.映射共享内存,shmat
3.数据写入/读取
4.释放映射的地址或者共享内存shmdt,shmctl
我们就按照这个思路来编程,老样子,一个进程写东西,一个进程读东西。
read.c
在这里插入图片描述

write.c
在这里插入图片描述
用到的函数的相关信息也在上面。
可以看到我们创建了,也不能说创建,怎么说呢,就是找到了一块内存地址,让它的id=shmid,这样我们通过索引找到它,开辟一块字符串地址,利用shmat函数把共享内存地址映射到addr来,接着往这里面写入我们要写的话,再由read.c读出来。
来看看效果:
效果
在这里插入图片描述在这里插入图片描述
可以看到,我们又成功实现了另外一种通信方式,共享内存。(管道(无名,命名),消息队列,共享内存)

(师上官可编程)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值