난 정말 최고야 멋있어
CreateFileMapping 을 이용한 SharedMemory 본문
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로 객체의 사용이 끝나면 닫아주도록 하자