행복한 연어의 이야기

(윈도우 시스템) 7. 프로세스간 통신(IPC) 1 본문

IT/윈도우 시스템 프로그래밍

(윈도우 시스템) 7. 프로세스간 통신(IPC) 1

해피살몬 2021. 8. 2. 19:43

1. 프로세스간 통신

프로세스 통신

프로세스들은 자신에게 할당된 메모리 공간 이외에는 접근이 불가능 하다.

A 프로세스에서 B 프로세스의 메모리 공간을 참조하지 못하니 데이터를 전달할 다른 방법을 고려해야한다.

 

2. 메일슬롯 방식의 IPC (Inter Process Communication)

메일슬롯(Mail Slot)의 원리

메일슬롯은 파이프와 더불어 대표적인 IPC 기법이다.

데이터를 발송하는 프로세스를 Sender 데이터를 받는 프로세스를 Receiver 라 했을때

Receiver는 데이터를 받을 메일슬롯을 생성한다.

Sender는 메일슬롯을 향해 데이터를 주고

Receiver는 그 메일슬롯을 통해 데이터를 수신한다.

 

1. Receciver 에서 메일슬롯을 생성한다.

HANDLE CreateMailslot(
	LPCTSTR lpName			//메일슬롯 이름
	DWORD nMaxMessageSize		//메일슬롯의 버퍼크기
	DWORD lReadTimeout		
	LPSECURITY_ATTRIBUTES lpSecurityAttributes	//핸들을 상속하기 위한 용도

IReadTimeout 인자는 메일슬롯의 데이터를 Readfile 함수로 읽는데

이 Readfile 함수의 최대 블로킹 시간을 나타낸다.

2. Sender 에서 메일슬롯을 향해 데이터를 준다.

HANDLE CreateFile(
	LPCTSTR lpFileName,				//파일 이름
	DWORD dwDesiredAccess,				//읽기 쓰기 모드 지정
	DWORD dwShareMode,				//파일 공유방식
	LPSECURITY_ATTRIBUTES lpSecurityAttributes,	//핸들을 상속하기 위한 용도
	DWORD dwCreationDisposition,			//파일 생성 방법
	DWORD dwFlagsAndAttributes,			//파일 특성 정보
	HANDLE hTemplateFile				//기존에 존재하는 파일 특성 전달자 
);

여기서 읽기쓰기 모드와 파일 생성방법을 주목한다.

Sender 이기 때문에 읽기 쓰기 모드 중 쓰기 모드로 지정하고

Receiver가 지정해 놓은 메일슬롯을 사용하기 때문에 생성방법은 기존에 만들어진 파일을 뜻하는

OPEN_EXISTING 을 전달한다

BOOL WriteFile(
	HANDLE hfile				//읽을 데이터 파일(메일슬롯)
	LPCVOID lpBuffer			//버퍼
	DWORD nNumberOfBytesToWrite		//데이터
	LPDWORD lpNumberOfBytesWritten		//함수호출 완료후 실제 데이터를 얻기위한 변수 주소
	LPOVERLAPPED lpOverlapped
);

위에서 파일을 생성했으니 WriteFile 함수로 전달할 내용을 작성한다..

3. Receiver는 메일슬롯을 통해 데이터를 수신한다.

BOOL ReadFile(
	HANDLE hfile				//메일슬롯의 핸들을 인자로 전달
	LPCVOID lpBuffer			//버퍼
	DWORD nNumberOfBytesToWrite		//데이터 
	LPDWORD lpNumberOfBytesWritten		//함수호출 완료후 실제 데이터를 얻기위한 변수 주소
	LPOVERLAPPED lpOverlapped
);

메일슬롯에 있는 데이터를 읽는 함수이다.

 

메일슬롯의 고찰

메일슬롯은 한쪽 방향으로만 메세지를 전달할 수 있다.

양쪽 방향 통신을 위해서는 두개의 메일 슬롯을 생성해야한다.

또한 메일슬롯은 브로드캐스팅 방식의 통신을 지원한다.

Sender 는 한번의 메세지 전송으로 여러개의 Receiver 에게 메세지를 전달 할 수 있다.

 

알고 넘어가야할 것

1. 프로세스간 통신 기법이 존재하는 이유

2. 메일 슬롯의 특성

 

'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.

Comments