IT공부/IT서적

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 7장. 프로세스간 통신(IPC) - 1

shine94 2025. 1. 7. 21:33

* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다

   https://product.kyobobook.co.kr/detail/S000001223395

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 | 윤성우 - 교보문고

뇌를 자극하는 윈도우즈 시스템 프로그래밍 |

product.kyobobook.co.kr

 

 

 

 

* IPC(Inter-Process Communication)

   프로세스 사이의 통신

 

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

ㄴ 안정성을 높이기 위함

 

* 메일 슬롯(Mail Slot)

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

   단방향 통신과 브로드캐스팅 방식을 지원하는 통신 기법

 

* CreateMailslot 함수

HANDLE CreateMailslotA(
  [in]           LPCSTR                lpName,
  [in]           DWORD                 nMaxMessageSize,
  [in]           DWORD                 lReadTimeout,
  [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

 

lpName

 : mailslot의 이름

   메일 슬롯은 이름은 형식을 지켜야 한다

   또한, 이름 필드는 고유해야 하며 백슬라이시로 구분된 여러 수준의 의사 디렉터리를 포함할 수 있다

   [형식] \\.\mailslot\[path]이름

nMaxMessageSize

 : mailslot에 쓸 수 있는 단일 메시지의 최대 크기(바이트)

   이 값을 0으로 설정할 경우, 시스템이 허용하는 최대 크기로 지정된다
lReadTimeout

 : 시간 제한(밀리초)이 발생하기 전에 읽기 작업이 mailslot에 메시지를 쓸 때까지 대기할 수 있는 시간

lpSecurityAttributes

 : 반환된 핸들을 자식 프로세스에서 상속할 수 있는지 여부를 결정한다

 

https://learn.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-createmailslota

 

CreateMailslotA 함수(winbase.h) - Win32 apps

지정한 이름을 가진 mailslot을 만들고 mailslot 서버가 mailslot에서 작업을 수행하는 데 사용할 수 있는 핸들을 반환합니다. (ANSI)

learn.microsoft.com

 

* 커널 오브젝트의 상태

   Signaled - 신호를 받은 상태, Non-Signaled - 신호를 받지 않은 상태

   프로세스가 커널 오브젝트를 생성시 Non-Signaled 상태

   프로세스가 종료시 Signaled 상태

 

* WaitForSingleObject, WaitForMultipleObjects

   커널 오브젝트를 감시하는 역할

   Non-Signaled 상태에 있을 때는 함수를 반환하지 않고 블로킹 상태에 있다가

   Signaled 상태가 되면 함수를 빠져나오는 특성이 있다

   ㄴ 블로킹?

       : 특정 조건이 충족될 때까지 현재 스레드(또는 프로세스)가 실행을 멈추고 기다리는 상태

 

https://learn.microsoft.com/ko-kr/windows/win32/api/synchapi/nf-synchapi-waitforsingleobject

 

WaitForSingleObject 함수(synchapi.h) - Win32 apps

지정된 개체가 신호 상태가 되거나 시간 제한 간격이 경과할 때까지 기다립니다.

learn.microsoft.com

https://learn.microsoft.com/ko-kr/windows/win32/api/synchapi/nf-synchapi-waitformultipleobjects

 

WaitForMultipleObjects 함수(synchapi.h) - Win32 apps

지정된 개체 중 하나 또는 전부가 신호 상태이거나 시간 제한 간격이 경과할 때까지 기다립니다.

learn.microsoft.com

 

* GetExitCodeProcess

   부모 프로세스가 자식 프로세스의 종료코드를 얻기

 

https://learn.microsoft.com/ko-kr/windows/win32/api/processthreadsapi/nf-processthreadsapi-getexitcodeprocess

 

GetExitCodeProcess 함수(processthreadsapi.h) - Win32 apps

지정된 프로세스의 종료 상태 검색합니다.

learn.microsoft.com