Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

난 정말 최고야 멋있어

CreateFileMapping 을 이용한 SharedMemory 본문

카테고리 없음

CreateFileMapping 을 이용한 SharedMemory

n00bh4cker 2019. 12. 30. 18:32

server

#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
    auto memmap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 4, L"sharedmemory0");
    if (memmap == NULL)
    {
        cout << "CreateFileMapping Failed\n";
        cout << "Last Error : " << GetLastError() << endl;
        return -1;
    }
    auto psvar  = (PDWORD)MapViewOfFile(memmap, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    if (!psvar)
    {
        cout << "MapViewOfFile Failed\n";
        cout << "Last Error : " << GetLastError() << endl;
        if (memmap)
            CloseHandle(memmap);
        return -1;
    }
    cout << "psvar : " << psvar << endl;
    auto& svar = *psvar;
    while (true)
    {
        cout << "svar : " <<svar << endl;
        svar++;
        Sleep(1000);
    }
}

 

client

#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
    auto memmap = OpenFileMapping(FILE_MAP_READ, FALSE, L"sharedmemory0");
    if (!memmap)
    {
        cout << "OpenFileMapping Failed\n";
        cout << "Last Error : " << GetLastError() << endl;
        return -1;
    }
    auto psvar = (PDWORD)MapViewOfFile(memmap, FILE_MAP_READ, 0, 0, 0);
    if (!psvar)
    {
        cout << "MapViewOfFile Failed\n";
        cout << "Last Error : " << GetLastError() << endl;
        if (memmap)
            CloseHandle(memmap);
        return -1;
    }
    cout << "psavr : " << psvar << endl;
    auto& svar = *psvar;
    while (true)
    {
        cout <<"svar : " <<svar << endl;
        Sleep(1000);
    }
}

 

서버 : CreateFileMapping 으로 메모리맵을 만들고 MapViewOfFile로 포인터를 얻어와서 쓰면 된다

클라이언트 :  OpenFileMapping으로 메모리맵을 열고 MapViewOfFile로 포인터를 얻어와서 쓰면 된다

 

 

위의 소스에는 대충 짜느라 대충했지만 

 

UnmapViewOfFile와 CloseHandle로 객체의 사용이 끝나면 닫아주도록 하자