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)
08.1 핸들 테이블과 오브젝트 핸들의 상속 (0) | 2020.04.18 |
---|---|
07.3 Signaled vs Non-Signaled (0) | 2020.04.18 |
07.1 프로세스간 통신(IPC)의 의미 (0) | 2020.04.18 |
06.3 커널 오브젝트와 Usage Count (0) | 2020.04.05 |
06.2 커널 오브젝트와 핸들의 종속 관계 (0) | 2020.04.05 |
댓글 영역