IPC란 Inter - Process - Communication 의 약자로서
프로세스 사이의 통신 이라는 뜻을 가진다.
통신이란 기본적으로 데이터를 주고 받는 행위이며,
따라서 프로세스들이 서로 통신을 한다는 것은 둘 이상의
프로세스가 데이터를 주고 받는 행위라고 정의할 수 있다.
IPC의 종류
1. 메일슬롯 원리 (Mail Slot)
메일슬롯은 파이프와 더불어 대표적인 IPC 기법이다.
메일슬롯은 쉽게 우체통이라 생각하면 되며,
데이터를 주고 받기 위해 프로세스가 우체통을 마련하는 것이다
즉 Receiver 프로세스는 우체통을 하나 마련하고
Sender 프로세스가 데이터를 Receiver 우체통으로 보낸다.
그러면 Receiver가 데이터를 받을 수 있게 된다.
메일슬롯 구성을 위해 필요한 요소
1. Receiver 의 조건 사항
Receiver에 해당하는 프로세스는 우체통을 생성해야 하며,
이를 생성하는 함수는 CreateMailslot() 함수이다.
HANDLE WINAPI CreateMailslot(
__in LPCTSTR lpName,
__in DWORD nMaxMessageSize,
__in DWORD lReadTimeout,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
- lpName 생성하는 메일슬롯의 이름을 결정하는데 사용한다.
즉 주소를 지정하는 것이다. 기본 형식은 다음과 같다.
\\ Computername \ mailslot \ [path]name
- nMaxMessageSize 메일슬롯의 버퍼 크기를 지정하는데 사용한다,
즉 우체통의 크기를 지정하는데 사용하면 0일 경우 시스템이 허용하는 최대크기로 설정한다.
lReadTimeout 메일 슬롯을 통해 전송된 데이터를 읽기 위해 ReadFile함수가 사용되며,
메일슬롯에 데이터가 있으면 데이터를 읽으면서 ReadFile 함수를 빠져나오게 된다.
그러나 메일슬롯이 비어있다면 데이터가 채워질때까지 블로킹 상태에 놓이게 된다.
이 인자는 최대 블로킹 시간을 밀리세컨드 단위로 지정하며, 0을 인자로 전달하면
메일슬롯에 데이터가 잇든지 없든지 블로킹 상태없이 빠져 나와 다음 단계를 실행한다.
그리고 상수 MAILSLOT_WAIT_FOREVER 를 인자로 전달할 경우 ReadFile 함수는
읽어 들일 데이터가 존재하게 될 때까지 블로킹 상태에 놓이게 된다.
lpSecurityAttributes 핸들을 상속하기 위한 용도이다.
함수의 반환 타입은 커널 오브젝트의 핸들이며, 메일슬롯도
커널에 의해서 관리되는 리소스이므로, 커널 오브젝트가 더불어 생성되고,
이 커널 오브젝트의 핸들이 반환되는 것이다.
둘째 Sender의 조건사항
Sender는 Receiver 가 만들어 놓은 메일슬롯의 이름 즉 주소를 알아야 하며,
다음은 실제 예이다.
//통로 마련 작업, 해당 주소의 메일슬롯을 개방한다. 즉 데이터 스트림을 형성한다.
HANDLE hMailSlot;
hMailSlot = CreateFile ( "\\\\.\\.mailslot\\mailbox", ~~);
//데이터 전송
CHAR Message[50];
WriteFile(hMailSlot, Message, ~~);
---- 메일슬롯 분석
\\ Computername \ mailslot \ [path]name
실제 채워 넣어야 할 부분은 컴퓨터이름과 pathname 이다.
메일슬롯은 동일한 네트워크 도메인에 존재하는 호스트들
사이의 데이터 전달을 목적으로도 사용할 수 있다.
위 샘플에서 컴퓨터네임 부분에 . 을 넣은 것은 로컬 컴퓨터를 의미한다.
path 네임은 실질적인 메일슬롯 이름이며, 위 샘플은 mailbox 이다.
그래서 다음과 같은 형태의 메일 슬롯 이름이 구성되었다.
\\. \mailslot\mailbox
path name은 path 정보를 포함하여 계층 구조의 형태로 보다 체계화가 가능하다.
즉 다음처럼 구성할 수 있다.
\\.\mailslot\abc\def\ mailbox
메일슬롯에 데이터를 전송하기 위해 해당 메일슬롯의 연결을 의미하는
데이터 스트림이 필요한데, 이는 CreateMailslot 함수의 호출을 통해 생성되는 메일
슬롯과는 또다른 형태의 리소스로서 이 역시도 운영체제의 의해
커널 오브젝트와 핸들의 생성을 동반한다.
'Windows > System Programming' 카테고리의 다른 글
커널 오브젝트의 두 가지 상태 (0) | 2011.08.12 |
---|---|
메일슬롯과 IPC 에 대한 고찰 (0) | 2011.08.12 |
메일슬롯 (MailSlot) 의 예 (0) | 2011.08.12 |
커널 오브젝트와 Usage Count 란? (0) | 2011.08.12 |
다양한 문자셋 (0) | 2011.07.16 |