본문 바로가기
프로그래밍/Windows

IPC MailSlot 메일 슬롯

by 즉흥 2014. 5. 25.
728x90
반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<cstdio>
#include<tchar.h>
#include<Windows.h>
int _tmain(){
    HANDLE hMailSlot;
    DWORD sz;
    
    hMailSlot = CreateMailslot(
        _T("\\\\.\\mailslot\\tmp"),
        0,
        MAILSLOT_WAIT_FOREVER,
        NULL
        );
    if (hMailSlot == INVALID_HANDLE_VALUE){
        puts("메일 슬롯 생성 실패");
        return -1;
    }
 
    while (1){
        TCHAR msg[52] = { 0, };
        if (!ReadFile(hMailSlot,
            msg,
            50,
            &sz,
            NULL
            )){
            _tprintf(_T("읽기 실패\n"));
            return -1;
        }
        _putts(msg);
    }
    return 0;
}

메일 슬롯 생성 후, 메시지 대기.


Colored By Color Scripter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
#include<tchar.h>
#include<Windows.h>
int _tmain(){
    HANDLE hMailSlot;
    DWORD sz;
    hMailSlot = CreateFile(
        L"\\\\.\\mailslot\\tmp",
        GENERIC_WRITE,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL
        );
    if (hMailSlot == INVALID_HANDLE_VALUE){
        puts("메일 슬롯 생성 실패");
        return -1;
    }
    TCHAR msg[52];
    
    while (1){
        wprintf(_T(": "));
        _getws_s(msg);
        if (!WriteFile(hMailSlot,
            msg,
            50,
            &sz,
            NULL)){
            _tprintf(_T("쓰기 실패\n"));
            return -1;
        }
 
    }
    return 0;
}

생성된 메일 슬롯에 메시지 보내기.


 HANDLE WINAPI CreateMailslot(

  _In_      LPCTSTR lpName,

  _In_      DWORD nMaxMessageSize,

  _In_      DWORD lReadTimeout,

  _In_opt_  LPSECURITY_ATTRIBUTES lpSecurityAttributes

);


성공하면 핸들 값을, 실패하면 INVALID_HANDLE_VALUE 를 리턴

출처 : http://msdn.microsoft.com/en-us/library/aa365147.aspx


HANDLE WINAPI CreateFile( _In_      LPCTSTR lpFileName, _In_      DWORD dwDesiredAccess, _In_      DWORD dwShareMode, _In_opt_  LPSECURITY_ATTRIBUTES lpSecurityAttributes, _In_      DWORD dwCreationDisposition, _In_      DWORD dwFlagsAndAttributes, _In_opt_  HANDLE hTemplateFile );

출처 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx


IPC = Inter-Process Communication, 프로세스 간의 통신


서로 다른 프로세스끼리 같은 메모리를 공유할 수 없어서 CreateFIle로 MailSlot을 만들어놓고 MailSlot을 매개로 서로 통신하는 듯 하다.


메일 슬롯은 단방향 통신이다.




윤성우, "뇌를 자극하는 윈도우즈 시스템 프로그래밍"


정독하고


이전에 읽다 포기한 윈도우즈 프로그래밍 책 읽으려고 하는 중.


728x90
반응형

댓글