C++ 共享內存

#include
#include <iostream>
#include <string>
#include <cstring>
using namespace std;


int main()
{
    string strMapName("ShareMemory");                // 內存映射對象名稱
    string strComData("This is common data!");        // 共享內存中的數據
    LPVOID pBuffer;                                    // 共享內存指針


    // 首先試圖打開一個命名的內存映射文件對象  
    HANDLE hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, strMapName.c_str());
    if (NULL == hMap)
    {    // 打開失敗,創建之
        hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE,
                                   NULL,
                                   PAGE_READWRITE,
                                   0,
                                   strComData.length()+1,
                                   strMapName.c_str());
        // 映射對象的一個視圖,得到指向共享內存的指針,設置裏面的數據
        pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
        strcpy((char*)pBuffer, strComData.c_str());
        cout << "寫入共享內存數據:" << (char *)pBuffer << endl;
    }
    else
    {    // 打開成功,映射對象的一個視圖,得到指向共享內存的指針,顯示出裏面的數據
        pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
        cout << "讀取共享內存數據:" << (char *)pBuffer << endl;
    }


    getchar();            // 注意,進程關閉後,所有句柄自動關閉,所以要在這裏暫停


    // 解除文件映射,關閉內存映射文件對象句柄
    ::UnmapViewOfFile(pBuffer);
    ::CloseHandle(hMap);
    system("pause");        
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章