C/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;
}

 

posted @ 2023-05-16 11:43  三字经  阅读(119)  评论(0编辑  收藏  举报