// ShareServer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <assert.h>
typedef struct
{
int a;
float b;
double c;
char buffer[64];
} MYSTRUCT;
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hMemoryMap = NULL;
LPBYTE pMemoryMap = NULL;
hMemoryMap = ::CreateFileMapping(
(HANDLE)0xffffffff, // 파일 맵의 핸들, 초기에 0xffffffff를 설정한다.
NULL, // 보안 속성
PAGE_READWRITE, // 읽고/쓰기 속성
0, // 64비트 어드레스를 사용한다. 상위 32비트 - 메모리의 크기
sizeof(MYSTRUCT),// 하위 32비트 - 여기선LPBYTE 타입.
L"fork_server1");// 공유 파일맵의 이름 - Uique 해야한다.
if(!hMemoryMap) {
::MessageBox(NULL, L"공유 메모리를 생성할 수 없습니다.", L"Error", MB_OK);
return FALSE;
}
pMemoryMap = (BYTE*)::MapViewOfFile(
hMemoryMap, // 파일맵의 핸들
FILE_MAP_ALL_ACCESS, // 액세스 모드 - 현재는 쓰기
0, // 메모리 시작번지부터의 이격된 상위 32비트
0, // 메모리 시작번지부터의 이격된 하위 32비트
0); // 사용할 메모리 블록의 크기 - 0이면 설정한 전체 메모리
if(!pMemoryMap)
{
CloseHandle(hMemoryMap);
::MessageBox(NULL, L"공유 메모리를 열수 없습니다.", L"Error", MB_OK);
return FALSE;
}
__int64 check = 0;
MYSTRUCT* pStruct = (MYSTRUCT*)pMemoryMap;
while(1)
{
pStruct->a = check;
pStruct->b = 0.1f;
pStruct->c = 0.0000001;
strcpy(pStruct->buffer, "12345678901234567890\n");
printf("%s", pStruct->buffer);
if(check++%100000 == 0)
{
if(_kbhit() != 0)
break;
}
}
if(pMemoryMap)
UnmapViewOfFile(pMemoryMap);
if(hMemoryMap)
CloseHandle(hMemoryMap);
return 0;
}
공유 메모리를 이용한 서버 소스 이다. 가끔은 공유메모리를 사용할때가 있다.
'구조적언어 > C' 카테고리의 다른 글
링크드 리스크 만들기 (0) | 2010.06.07 |
---|---|
swap 함수를 참조에 의한으로 변경해야 할 경우. (0) | 2010.06.07 |
#3. 공유메모리 사용설명서 (0) | 2009.12.17 |
#2. 공유메모리 클라이언트 소스 (0) | 2009.12.17 |
hello World를 찍어보자. (0) | 2009.12.17 |