标签:进程间通信 ipc 邮槽 邮槽示例 windows编程
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
);
写入邮槽:
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped);
第一个参数:文件句柄。
第二个参数:数据缓冲区指针。
先在VC6.0中运行服务端程序,在运行客户端程序:
运行效果:
Mailslot服务端:
【IPC进程间通讯之一】邮槽MailSlot,布布扣,bubuko.com
【IPC进程间通讯之一】邮槽MailSlot
标签:进程间通信 ipc 邮槽 邮槽示例 windows编程
原文地址:http://blog.csdn.net/lovecodeless/article/details/25775793