首页 > 代码库 > 【IPC进程间通讯之一】邮槽MailSlot
【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
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);
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped);
第一个参数:文件句柄。
第二个参数:数据缓冲区指针。
第三个参数:写入字节数。
第四个参数:返回实际写入字节数。
第五个参数:结构体指针,一般置NULL。
该函数用于客户端向Mailslot写入数据。
4.牛刀小试 :
先在VC6.0中运行服务端程序,在运行客户端程序:
运行效果:
Mailslot服务端:
<script src="https://code.csdn.net/snippets/344498.js" type="text/javascript"></script>
Mailslot客户端:
<script src="https://code.csdn.net/snippets/344501.js" type="text/javascript"></script>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。