2024年最全进程间通信 之 共享内存,2024年最新C C++面试数据结构算法

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

size 是需要创建的共享内存的大小,shmflg 创建/获取共享内存时传入的标志位。

其中,参数shmflg可以为 IPC_CREAT 和 IPC_EXCL || IPC_CREAT

  • IPC_CREAT:shm 如果不存在,就创建,如果存在,就获取!通常用于获取时用。
  • IPC_EXCL || IPC_CREAT:shm 如果不存在就创建,如果存在就出错返回,这样可以保证创建的共享内存是全新的!通常用于创建时用。IPC_EXCL 不能单独使用。

创建共享内存

int shmid = shmget(key, 4096, IPC_EXCL || IPC_CREAT);

获取共享内存:

int shmid = shmget(key, 4096, IPC_CREAT);

如图,创建/获取 共享内存的工作就完成了。

shmat 接口:将共享内存映射到进程地址空间中

void *shmat(int shmid, const void *shmaddr, int shmflg);

这个接口有点像C语言中的 malloc 函数,都是在进程地址空间中申请一块空间,并返回 void* 类型的指向对应空间的指针,如果要这块内存的话,就需要将 void* 强转为对应数据类型的指针。

其中,shmaddr 参数是映射到地址空间中的地址,可以自己设置,也可以直接传 nullptr,操作系统会自动分配空间。

shmflg 原理与 shmget 是相同的,这里直接用 0 就行!

shmdt 接口:将共享内存从进程地址空间中移除

int shmdt(const void *shmaddr);

这个接口的使用比较简单,只需要将上一步得到的共享内存在进程地址空间中的起始地址作为参数传给 shmdt 即可将共享内存从进程地址中移除!

shmdt(s);

shmctl接口:销毁共享内存

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

查看当前共享内存的信息

ipcs -m

在此之后,就可以在不同进程中访问共享内存中的空间,进而达到通信的目的!

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值