标签:
命名管道(Named Pipes)是一种简单的进程间通信(IPC)机制。命名管道可以在同一台计算机的不同进程之间,或者跨越一个网络的不同计算机的不同进程之间的可靠的双向或单向的数据通信。
命名管道利用了微软网络提供者(MSNP)重定向器,因此无需涉及底层的通信协议等细节。命名管道是围绕windows文件系统设计的一种机制,采用“命名管道文件系统”(Named Pipe File System,NPFS)接口。因此,客户端和服务端均可以使用标准的WIN32文件系统API函数(如ReadFile和WriteFile)来进行数据的收发。
命名管道的命名规范遵循“通用命名规范(UNC)” :
\\server\pipe[\path]\name
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /************************************************************************* Purpose : 创建命名管道,如果存在指定名字的管道,则创建该管道的一个实例 Input : lpName -- 管道名称 dwOpenMode -- 打开模式 dwPipeMode -- 消息模式 nMaxInstances -- 最大实例数(1-255) nOutBufferSize -- 输出缓冲区长度,0表示用默认设置 nInBufferSize -- 输入缓冲区长度,0表示用默认设置 nDefaultTimeOut -- 管道的默认超时时间(毫秒),0表示默认超时时间50毫秒 lpSecurityAttributes-- 安全描述符,如无特殊需求默认为0即可 Return : 成功 -- 返回管道句柄 失败 -- 返回INVALID_HANDLE_VALUE 通过GetLastError()获取错误代码 Remark : *************************************************************************/ HANDLE WINAPI CreateNamedPipe( _In_ LPCTSTR lpName, _In_ DWORD dwOpenMode, _In_ DWORD dwPipeMode, _In_ DWORD nMaxInstances, _In_ DWORD nOutBufferSize, _In_ DWORD nInBufferSize, _In_ DWORD nDefaultTimeOut, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes ); |
dwOpenMode 为下列常数组合
dwPipeMode 为下列常数组合
常数之一:
1 2 3 4 5 6 7 8 9 10 11 | /************************************************************************* Purpose : 等待客户连接管道 Input : hNamedPipe -- 创建管道的句柄,由CreateNamedPipe成功返回 lpOverlapped -- 打开模式 Return : TRUE -- 成功 FALSE -- 失败,通过GetLastError()获取错误码 Remark : *************************************************************************/ BOOL WINAPI ConnectNamedPipe( _In_ HANDLE hNamedPipe, _Inout_opt_ LPOVERLAPPED lpOverlapped ); |
lpOverlapped 如设为NULL,表示将线程挂起,直到一个客户同管道连接为止。否则就立即返回;此时,如管道尚未连接,客户同管道连接时就会触发lpOverlapped结构中的事件对象。随后,可用一个等待函数来监视连接。
1 2 3 4 5 6 7 8 9 10 11 | /************************************************************************* Purpose : 等待管道实例是否可用 Input : lpNamedPipeName -- 管道名称 nTimeOut -- 等待时间 Return : TRUE -- 成功 FALSE -- 失败,通过GetLastError()获取错误码 Remark : *************************************************************************/ BOOL WINAPI WaitNamedPipe( _In_ LPCTSTR lpNamedPipeName, _In_ DWORD nTimeOut ); |
标签:
原文地址:http://www.cnblogs.com/dspeeding/p/4427777.html