首页 > 系统相关 >C/C++ CreateFileMapping 共享内存

C/C++ CreateFileMapping 共享内存

时间:2023-05-16 11:57:05浏览次数:52  
标签:文件 lpMapAddr 映射 hMap 连用 C++ 共享内存 CreateFileMapping

原链接C/C++ CreateFileMapping 共享内存 - lyshark - 博客园 (cnblogs.com)

#include <iostream>
#include <Windows.h>
using namespace std;

int main()
{
    HANDLE hMap;
    PINT lpMapAddr;


    
    
    // get file mapping's handle 
    hMap = OpenFileMapping(
                    FILE_MAP_ALL_ACCESS,    // 权限:所有
                    FALSE,                    // 不继承句柄
                    "LYSM_Map"                // 名字
                );
    if (NULL == hMap) {
        // init
        hMap = CreateFileMapping(
                    INVALID_HANDLE_VALUE,    // 不是真实的文件,所以写 INVALID_HANDLE_VALUE
                    NULL,                    // 同上
                    PAGE_READWRITE,            // 该句柄对文件映射可读可写
                    0,                        // 与下一个参数连用,表示文件映射的大小
                    1024,                    // 与上一个参数连用,表示文件映射的大小
                    "LYSM_Map"                // 名字
                );
        if (NULL == hMap) {
            goto end;
        }
        lpMapAddr = (PINT)MapViewOfFile(
            hMap,                        // 文件映射句柄
            FILE_MAP_ALL_ACCESS,        // 权限:所有
            0,                            // 与下一个参数连用,表示文件映射起始地址偏移
            0,                            // 与上一个参数连用,表示文件映射起始地址偏移
            0                            // 映射整个文件映射对象
        );
        *lpMapAddr = 1;
    }

    // get file mapping's address
    lpMapAddr = (PINT)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

    // read 
    cout << "instance's count : " << *lpMapAddr << endl;

    // write
    *lpMapAddr = *lpMapAddr + 1;


    cout << "finished." << endl;
    getchar();
end:
    if (hMap)
        CloseHandle(hMap);
    getchar();
    return 0;
}

 

标签:文件,lpMapAddr,映射,hMap,连用,C++,共享内存,CreateFileMapping
From: https://www.cnblogs.com/xwtstudio/p/17404498.html

相关文章

  • http yolov5 tensorrt C++ windows 客户端服务器高性能部署,使用tensorrt推理yolov5模
    httpyolov5tensorrtC++windows客户端服务器高性能部署,使用tensorrt推理yolov5模型,封装成了dll;http服务器,监听指定端口、调用dll加载模型到内存(可同时支持多个模型同时加载并行运行)同时监听指定http指定路径是否有请求,收到请求后解析json数据中数据,从中解析出识别指定模型类......
  • yolov5 yolov5_obb rotate 旋转目标检测 C/C++ 支持同时多相机和多模型
    yolov5yolov5_obbrotate旋转目标检测C/C++支持同时多相机和多模型windowsvs2019封装dll,一个dll,支持同模型多次加载和不同模型同时多次加载,支持mfc,和qt调用,支持批量图片识别,Demo支持图片、视频、文件夹和RTSP流识别。ID:143000668549326309......
  • C++黑马程序员——P207-209. deque容器 插入和删除,数据存取,排序操作
    P207.deque容器——插入和删除P208.deque容器——数据存取P209.deque容器——排序操作P207.deque插入和删除 ————————————————————————————————————————————————————————1#include<iostream>2#......
  • 写C++程序时的易错点
     1.分号问题:a.语句开头带“#”号的(#include、#define)末尾不加分号b.函数参数列表后面(小括号后面)、函数体后面(大括号后面)不加分号c.判断语句、循环语句小括号后面不加分号d.其他语句末尾都要加分号 ......
  • 5月15日c++小语法右值引用,lambda表达式,和多线程
    c++中有一个东西叫做左值引用和右值引用,因为面向对象语言中有很多封装好的自定义类型容器,而这些容器又不像内置类型那样传值方便,有时候可能会有很大的深拷贝浪费于是有了左值引用:在函数传参时方便的传引用避免了传复杂的指针,而在返回之上直接传引用减少了不必要的深拷贝.而右......
  • 23-5-15--c++文件基本操作--dog
    定义一个Dog类,包括体重和年龄两个数据成员及其成员函数,声明一个实例dog1,体重5,年龄10,使用I/O流把dog1的状态写入磁盘文件。再声明一个实例dog2,通过读取文件dog1的状态赋给dog2。分别用文本方式和二进制方式操作文件。#include<iostream>#include<fstream>#include<string>usin......
  • c++打卡第二十七天
    一、水仙花数1、问题描述 2、设计思路对于一个三位数,,求出它的每位数,三个数的平方加到一起,判断是否与原数相等,如果相等,就是水仙花数。3、流程图 4、代码实现#include<iostream>usingnamespacestd;intmain(){intn,a,b,c,d;for(n=100;n<1000;n++){......
  • c++打卡练习(29)
    求一百以内的勾股数流程图:伪代码:源代码:#include<iostream>usingnamespacestd;intmain(){ inta,b,c,i,j,k; for(a=1;a<=100;a++){ for(b=a+1;b<=100;b++){ for(c=b+1;c<=100;c++){ if(a*a+b*b==c*c){ cout<<a<<""<<b<<......
  • C++
    复数的比较建立一个复数类,实数和虚数是其私有数据成员。建立一个>(大于号)的运算符重载,比较两个复数间模的大小。测试输入包含若干测试用例,每个测试用例占一行。每个测试用例包括四个数字,前两个数字分别表示第一个复数的实部和虚部,第三个和第四个数字分别表示第二个复数的实部和虚......
  • 使用C++实现贝塞尔曲线算法平滑多边形
    定义一个函数来计算贝塞尔曲线的坐标,并使用循环来更新坐标。把坐标连接起来,就可以得到一个平滑的多边形。例如:可以使用贝塞尔曲线或B样条曲线来实现曲线平滑。这两种曲线都是由一组控制点构成的,并且可以通过调整控制点来调整曲线形状。贝塞尔曲线是一种由多个点组成的曲线,其中每......