【IPC进程间通讯之一】邮槽MailSlot

IPC进程间通信+邮槽MailSlot

      
        IPC(Inter-Process Communication,进程间通信)。
        现代计算机采用 虚拟内存机制 ,为 进程 提供独立的足够大的地址空间,处于安全目的,一个进程不具有特殊的权限,是无法访问另一个进程的内存空间,进程间相互隔绝。进程间通信IPC就需要特别的机制来实现,邮槽MailSlot是常用的IPC方法之一。
        
        1.邮槽(MailSlot) :
        
       邮槽MailSlot通信的进程分为 服务端 客户端 。服务端创建MailSlot,创建时指定邮槽名,客户端同过邮槽名打开MailSlot。
        邮槽是单向的 ,服务端只能读取MailSlot,客户端只能写入MailSlot。服务端读取数据是先入先出,即先写入的数据先被读取。

        2.邮槽命名 :
        本机上格式:\\.\mailslot\[path\]name
        如:\\.mailslot\my_mailslot

        3.基本API函数
创建邮槽
        HANDLE  CreateMailSlot(
                          LPCTSTR  lpName,
                          DWORD     nMaxMessageSize,
                          DWORD     lReadTimeout,
                          LPSECURITY_ATTRIBUTES   lpSecurityAttributes );
        第一个参数:邮槽名。
        第二个参数:最大消息长度。
        第三个参数:读取超时,设为0时,没有消息立即返回,MAILSLOT_WAIT_FORVER时,一直等待消息。
        第三个参数:安全属性,一般设为NULL。
        该函数创建一个Mailslot,并返回该邮槽的句柄。
读取邮槽:        
        BOOL ReadFile(
                   
HANDLE    hFile,
                    LPVOID     lpBuffer,
                    DWORD    nNumberOfBytesToRead,
                    LPDOWRD    lpNumberOfBytesRead,
                    LPOVERLAPPED   lpOverlapped
);
        第一个参数:邮槽句柄。
        第二个参数:缓存地址。
        第三个参数:消息的长度。
        第四个参数:实际读取的长度。
        第五个参数:一般设置为NULL。
        该函数用于读取邮槽内数据。
打开邮槽:
        BOOL  CreateFile(
                     LPCTSTR   lpFileName,
                     DWORD     dwDesiredAccess,
                     DWORD     dwShareMode,
                     LPSECURITY_ATTRIBUTES   lpSecurityAttributes,
                     DWORD    dwCreationDisposition,
                     DWORD    dwFlagsAndAttributes,
                    HANDLE    hTemplateFile
);
         第一个参数:文件指针。
         第二个参数:访问模式。
         第三个参数:共享模式。
         第四个参数:安全属性指针。
         第五个参数:创建选项。
         第六个参数:文件属性。
         第七个参数:用于复制文件句柄。
         该函数用于客户端打开Mailslot。
写入邮槽:
        BOOL  WriteFile(
                     HANDLE    hFile,
                     LPCVOID   lpBuffer,
                     DWORD     nNumberOfBytesToWrite,
                     LPDWORD   lpNumberOfBytesWritten,
                     LPOVERLAPPED    lpOverlapped
);
         第一个参数:文件句柄。
         第二个参数:数据缓冲区指针。
         第三个参数:写入字节数。
          第四个参数:返回实际写入字节数。
          第五个参数:结构体指针,一般置NULL。
          该函数用于客户端向Mailslot写入数据。

         4.牛刀小试 : 
         先在VC6.0中运行服务端程序,在运行客户端程序
【IPC进程间通讯之一】邮槽MailSlot_第1张图片
        运行效果

Mailslot服务端:
Mailslot客户端:


你可能感兴趣的:(ipc,进程间通信,Windows编程,邮槽,邮槽示例)