상세 컨텐츠

본문 제목

07.2 메일슬롯 방식의 IPC

Programming/Windows System

by RACC8N 2020. 4. 18. 14:42

본문

Sender : 데이터를 전달하고자 하는 프로세스

Receiver : 데이터를 수신하는 프로세스

 

메일슬롯(Mail Slot) 원리 

" 데이터를 주고 받기 위해서 프로세스가 우체통을 마련하는 것"

 

Receiver가 밖에다가 우체통(MailSlot)을 하나 걸어둔다.

-> Sender는 Receiver의 MailSlot을 향하여 데이터를 날린다.

-> Receiver는 MailSlot에 있는 데이터를 읽는다.

 

※ Receiver가 Sender의 메모리 공간에 접근할 수 있으면 데이터 전달은 수월해진다. but 프로세스는 다른 프로세스 메모리 영역을 접근할 수 없다.

MailSlot 구성을 위해 필요한 요소

[Receiver]

Receiver는 MailSlot을 생성해야 한다.  CreateMailslot()

lpName 생성하는 메일슬롯의 이름 (주소를 지정하는 것) ex) \\.\mailslot\[path]name
nMaxMessageSize 메일슬롯의 버퍼 크기 (0 : 시스템이 허용하는 최대 크기)
lReadTimeout 최대 블로킹 시간 (0 : 블로킹 상태 없이 빠져나옴, MAILSLOT_WAIT_FOREVER : 계속 블로킹 상태)
lpSecurityAttributes 핸들 상속 용도

메일슬롯을 통해 전송된 데이터를 읽기 위해서 ReadFile 함수가 사용된다. 메일슬롯이 비어 있다면 데이터가 채워질 때까지 ReadFile 함수는 반환하지 않고 블로킹 상태에 놓이게 된다. lReadTimeout이 0일 경우 메일슬롯에 읽어 들일 데이터가 있든지, 없든지 간에 블로킹 상태 없이 빠져나와 다음 단계를 실행, MAILSLOT_WAIT_FOREVER일 경우 읽어 들일 데이터가 존재하게 될 때까지 블로킹 상태에 놓이게 된다.

 

Sender에서 보낸 데이터를 읽는다. ReadFile() ※ ReadFile 함수는 18장에서 자세히 다룸. 

hFile 메일슬롯의 핸들을 인자로 전달

 

[Sender]

Sender는 데이터를 Receiver에게 보낸다. (MailSlot의 이름을 알아야 한다)

1단계 CreateFile() ※ CreateFile 함수는 18장에서 자세히 다룸. lpFileName을 제외한 나머지는 그때 다룸.

lpFileName 메일슬롯의 이름(주소)

2단계 WriteFile() ※ WriteFile 함수는 18장에서 자세히 다룸. hFile을 제외한 나머지는 그때 다룸.

hFile 데이터를 읽어 들일 메일슬롯을 지정

 

MailSlot의 특징 

- 메일슬롯은 단방향 통신만 가능하다. (Sender -> Receiver)

- 메일슬롯은 브로드캐스팅 방식의 통신을 지원한다. (하나의 Sender -> 다수의  Receiver)

 

관련글 더보기

댓글 영역