当前位置: 首页 > news >正文

c++ linux——进程共享内存

共享内存概念:
每个进程的虚拟内存对应一块物理地址,如果两个进程需要共享某一块内存,则各自的虚拟内存会有一小块映射到同一片物理地址上。是最高效的进程间通信方式。
关键就是四个函数
shmget(创建或者获取现有的共享内存标识符)
shmat (将共享内存挂接到当前进程)
shmdt(共享内存与当前进程取消挂接)
shctrl(删除共享内存或者改变权限)
举例实现:
进程1

#include<sys/ipc.h>
#include<sys/shm.h>
int main()
{key_t key = ftok("pr1",0x6666);//获得一个共享内存的标识符if(key<0){return -1;}int shmid = shmget(key,4096,IPC_CREAT|IPC_EXCL);//创建一块共享内存,如果已经存在就返回共享内存的标识符char* addr = (char*)shmat(shmid,NULL,0);//将共享内存与当前进程挂接int i=0;while(i++<15){printf("client: %s\n",addr);sleep(1);}shmdt(addr);//将共享内存与当前进程取消挂接sleep(1);shmctrl(shmid,IPC_RMID,NULL);//销毁共享内存return 0;
}	
进程2
#include<sys/ipc.h>
#include<sys/shm.h>
int main()
{key_t key = ftok("pr1",0x6666);//获得一个共享内存的标识符if(key<0){return -1;}int shmid = shmget(key,0,IPC_CREAT);//获取共享内存char* addr = (char*)shmat(shmid,NULL,0);//将共享内存与当前进程挂接int i=0;while(i++<15){addr[i]='A';sleep(1);}shmdt(addr);//将共享内存与当前进程取消挂接return 0;
}	

查询linux下共享内存的信息

ipcs -m | grep root

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《JavaEE进阶》----3.<SpringBoot项目创建细节大全+打jar包运行>
  • 若依框架登录鉴权详解(动态路由)
  • 鸿蒙轻内核M核源码分析系列四 中断Hwi
  • Spring Boot 整合 Sentinel 实现流量控制
  • LabVIEW与Python联合图像处理
  • 2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整思路
  • TensorFlow-keras介绍(一)
  • 速盾:便宜的高防 CDN 推荐,高防 CDN 能抵御 DDoS 吗?
  • 探索 JavaScript 中的 instanceof 关键字
  • 3. GIS后端工程师岗位职责、技术要求和常见面试题
  • C语言新手小白详细教程(8)ASCll编码和字符串
  • macos下的 sed命令安装与使用 gnu-sed
  • 华为 HCIP-Datacom H12-821 题库 (10)
  • 损失函数与反向传播
  • 网络编程(TCP+网络模型)
  • 分享的文章《人生如棋》
  • (三)从jvm层面了解线程的启动和停止
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 30天自制操作系统-2
  • jdbc就是这么简单
  • js继承的实现方法
  • JS实现简单的MVC模式开发小游戏
  • MaxCompute访问TableStore(OTS) 数据
  • MYSQL 的 IF 函数
  • Python学习笔记 字符串拼接
  • Sass 快速入门教程
  • supervisor 永不挂掉的进程 安装以及使用
  • Vim Clutch | 面向脚踏板编程……
  • 成为一名优秀的Developer的书单
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 动态规划入门(以爬楼梯为例)
  • 如何胜任知名企业的商业数据分析师?
  • 如何在GitHub上创建个人博客
  • 什么是Javascript函数节流?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 数据科学 第 3 章 11 字符串处理
  • 小李飞刀:SQL题目刷起来!
  • 你对linux中grep命令知道多少?
  • Hibernate主键生成策略及选择
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​一些不规范的GTID使用场景
  • # 透过事物看本质的能力怎么培养?
  • #WEB前端(HTML属性)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (1)SpringCloud 整合Python
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (8)STL算法之替换
  • (C++20) consteval立即函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (六)激光线扫描-三维重建