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

进程通信-内存共享

这里我们要写两个程序 第一个程序用来创建一片内存  第二个程序用来读取那片内存

第一   创建内存

#include<iostream>
#include<Windows.h>
using namespace std;int main()
{//第一步创建一个文件映射HANDLE hFileMaping = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL,PAGE_READWRITE, 0, 256, "ZHAO");if (!hFileMaping){cout << GetLastError() << endl;}//第二步将文件映射转换到内存中//返回值为文件映射到的那片内存的起始地址  如果失败了就返回NULL//第一个参数为你想要映射的文件句柄  第二个是权限 第三个和第四个决定了起始位置 第五个参数是要映射的大小LPVOID lMapView = MapViewOfFile(hFileMaping,FILE_MAP_ALL_ACCESS,0, 0, 256);if (!lMapView){cout << GetLastError() << endl;}//第三步为前面映射出来的内存赋值memcpy(lMapView, "fuckyouhahaha", strlen("fuckyouhahaha") + 1);system("pause");CloseHandle(hFileMaping);UnmapViewOfFile(lMapView);
}

第一步使用API:CreatFileMappingA来创建一个文件映射

这个函数可以创建或者打开一个文件映射 当第一个参数为INVALID_HANDLE_VALUE时就是创建一个文件映射  第二个参数选择是否继承  第三个参数是创建的这个文件的权限 第四个为最大尺寸的高32位通常为0第五个是低32位 我们通过改低32位的数值即可控制文件的大小 最后一个参数为你这个文件映射的名称(另一个程序读取的时候会用到它)

第二步使用API:MapViewFile将文件映射转换到内存当中

MapViewFile这个函数的第一个参数为被转换的文件映射的句柄  第二个参数为内存的权限 第三个和第四个分别为映射文件起始位置的高32位和低32位  我们都写为0他俩组合结果就为0所以我们从文件的开头转换 最后一个为我们要转换的大小

第三步为我们创建出来的内存写入数据 这里我写了一个字符串

最后记得关闭文件映射并释放内存

下面来写第二个程序----读取第一个程序创建的内存

#include<iostream>
using namespace std;
#include<Windows.h>int main()
{//第一步通过映射来的内存名称来获取它的句柄HANDLE hFileMapping = OpenFileMappingA(FILE_MAP_ALL_ACCESS, 0, "ZHAO");if (!hFileMapping){cout << GetLastError()<<endl;}LPVOID lpFileBuffer = MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 256);if (!lpFileBuffer){cout << GetLastError() << endl;}
}

第一步使用OpenFileMappingA来获取叫做"ZHAO"这个文件映射的句柄  打开权限为FILE_MAP_ALL_ACCESS

第二步还是将文件映射转换到内存中  

执行查看lpFileBuffer对应的内存发现和刚刚我们写入的字符串一样

http://www.xdnf.cn/news/8765.html

相关文章:

  • 使用Java制作贪吃蛇小游戏
  • 历年福州大学保研上机真题
  • Java字符编码转换:从UTF-8到GBK的实现原理与实践
  • 【多线程】Java 实现方式及其优缺点
  • 智能语音通信新标杆——A-29P神经网络AI降噪回音消除模块深度解析
  • 【AI Study】第三天,Python基础 - 同NumPy类似的类库
  • Go语言中常见的6个设计模式
  • 2025-5-22Vue3快速上手
  • 华为OD机试真题—— 货币单位换算(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 把本地项目上传github上
  • 前端绘图基础——SVG详解
  • SprigBoot整合rocketmq-v5-client-spring-boot
  • Kafka Broker 总体工作流程
  • c++总结-04-智能指针
  • 嵌入式学习笔记 - freeRTOS 列表,链表,节点跟任务之间关系
  • 深度图数据增强方案-随机增加ROI区域的深度
  • 制造业主要管理哪些主数据范围
  • 云迹机器人底盘调用
  • 从AD9361 到 ADSY1100 ,中间的迭代产品历史
  • 软考 系统架构设计师系列知识点之杂项集萃(73)
  • 【MPC控制 - 从ACC到自动驾驶】5. 融会贯通:MPC在ACC中的优势总结与知识体系构建
  • 云手机是什么?哪个云手机便宜好用,掌派云手机流畅不卡顿
  • 前端垫片chimp
  • 贪心算法应用:Ford-Fulkerson最大流问题详解
  • 【C语言干货】free细节
  • 弦序参量(SOP)
  • 【MySQL】第10节|MySQL全局优化与Mysql 8.0新增特性详解
  • 【图像大模型】ControlNet:深度条件控制的生成模型架构解析
  • 如何确定是不是一个bug?
  • 深入理解Istio:全面解析与实践指南