프로그래밍/MFC , WinAPI

CreateMailslot 함수란 무엇인가?

친루엄 2018. 4. 9. 10:14
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 함수를 빠져나

 오게 됩니다. 그러나 메일 슬롯이 비어 있다면 데이터가 채워질 때까지 ReadFIle 함수는 반환하지 않고

 블로킹 상태에 놓이게 됩니다. 이 인자는 최대 블로킹 시간을 밀리세컨트 단위로 지정하는데 사용됩니

 다. 따라서 0을 인자로 던달하면 메일 슬롯에 읽어 들일 데이터가 있든,없든 간에 블로킹 상태없이 빠져

 나와 다음 단계를 실행합니다. 그리고 상수 MAILSLOT_WAIT_FOREVER를 인자로 전달할 경우 ReadFile

 함수는 읽어 들일 데이터가 존재하게 될 때까지 블로킹 상태에 놓이게 됩니다.

lpSecurityAttributes

 SECURITY_ATTRIBUTES 구조체에 대한 포인터 . 구조체 bInheritHandle 멤버는 반환된 핸들이 하위 프로세스에 의해 상속될 수 있는지 여부를 결정합니다.  경우lpSecuritytPtributes가 NULL인 경우 핸들은 상속할 수 없습니다.

 

 

 

메일슬롯도 커널에 의해서 관리되는 리소스이기 때문에 커널 오브젝트가 더불어 생성되고 이 커널

오브젝트의 핸들이 반환되는 것이다.