linux进程间通信之共享内存

本文详细介绍了Linux系统中实现进程间通信的共享内存机制,包括原理、创建、挂接、取消挂接及删除共享内存的步骤。通过示例代码展示了如何在C++中使用共享内存,并探讨了共享内存的生命周期。此外,还讨论了如何通过管道控制实现同步互斥,以避免数据冲突。文章最后提供了完整的代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一,共享内存原理

二,创建共享内存

1,shmget创建共享内存

2,shmat挂接共享内存

3,shmdt取消挂接共享内存

4,shmctl删除共享内存

三,代码使用

1,com.hpp

2,ipc_client.cpp

3,ipc_server.cpp

4,makefile

5,log.hpp

四,实验现象

五,添加管道控制

1,封装几个管道接口

2,客户端

3,服务端

4,实验现象

六,代码链接


一,共享内存原理

还是和上一节一样,俩个进程要通信,那么他俩就需要看到同一块资源,如图所示就是他的原理:
 

所以我们可以知道共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据

二,创建共享内存

四个函数

1,shmget创建共享内存

key需要用户自己提供:

需要用户调用ftok函数来给出:

这里使用和上一节的命名管道差不多,提供相同的路径,和一个int值,生成一个定值key_t,这样俩个进程只要是提供的路径相同,数字相同,就会得到同一个key_t,参考命名管道。

size:创建的大小:

shmflg:创建的方法和权限

IPC_CREAT:没有则创建,有了就返回创建好的。

IPC_EXCL:有了则出错返回,这个不单独使用,和IPC_CREAT,配合,用来保证创建的共享内存是新创建的,而不是以及创建好了。

这个函数的返回值就标定了一块共享内存,并且是唯一标定的。

2,shmat挂接共享内存

shmid:shmget的返回值

shnadder:从哪里挂接,我们一般不知道因该是特殊用途,设置为nullptr就好了,系统自动选择。

shmflag:传0使用默认读写就行了,

shmat的返回值是void* ,参考malloc开出的空间,差不多一样,就当malloc开出的空间那样使用就好了。

3,shmdt取消挂接共享内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LYH_1_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值