1、相关概述
命名管道(Named Pipes)是一种简单的进程间通信(IPC)机制。命名管道可以在同一台计算机的不同进程之间,或者跨越一个网络的不同计算机的不同进程之间的可靠的双向或单向的数据通信。
命名管道利用了微软网络提供者(MSNP)重定向器,因此无需涉及底层的通信协议等细节。命名管道是围绕windows文件系统设计的一种机制,采用“命名管道文件系统”(Named Pipe File System,NPFS)接口。因此,客户端和服务端均可以使用标准的WIN32文件系统API函数(如ReadFile和WriteFile)来进行数据的收发。
命名管道的命名规范遵循“通用命名规范(UNC)” :
\\server\pipe[\path]\name
- 其中\\server 指定一个服务器的名字,如果是本机则用\\.表示,\\192.168.1.100表示网络上的服务器。
- \pipe 是一个不可变化的“硬编码”字串(不区分大小写),用于指出该文件从属于NPFS
- [\path]\name 则唯一标识一个命名管道的名称。
2、相关函数
2.1 服务端函数
2.1.1 CreateNamedPipe 创建命名管道
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
dwOpenMode 为下列常数组合
常数之一:
- PIPE_ACCESS_DUPLEX 管道是双向的
- PIPE_ACCESS_INBOUND 数据从客户端流到服务器端
- PIPE_ACCESS_OUTBOUND 数据从服务器端流到客户端
常数之二:
- FILE_FLAG_WRITE_THROUGH 在网络中建立的字节型管道内,强迫数据在每次读写操作的时候通过网络传输。否则传输会缓存导致延迟
- FILE_FLAG_OVERLAPPED 允许(但不要求)用这个管道进行异步(重叠式)操作
dwPipeMode 为下列常数组合
常数之一:
- PIPE_TYPE_BYTE 数据作为一个连续的字节数据流写入管道
- PIPE_TYPE_MESSAGE 数据用数据块(名为“消息”或“报文”)的形式写入管道
常数之二:
- PIPE_READMODE_BYTE 数据以单独字节的形式从管道中读出
- PIPE_READMODE_MESSAGE 数据以名为“消息”的数据块形式从管道中读出(要求指定PIPE_TYPE_MESSAGE)
常数之三:
- PIPE_WAIT 同步操作在等待的时候挂起线程
- PIPE_NOWAIT 操作立即返回。这样可为异步传输提供一种落后的实现方法,已由Win32的重叠式传输机制取代了(不推荐!)
2.1.2 ConnectNamedPipe 等待客户连接
1 2 3 4 5 6 7 8 9 10 11 |
|
lpOverlapped 如设为NULL,表示将线程挂起,直到一个客户同管道连接为止。否则就立即返回;此时,如管道尚未连接,客户同管道连接时就会触发lpOverlapped结构中的事件对象。随后,可用一个等待函数来监视连接。
2.2 客户端函数
2.2.1 CreateFile 连接到一个命名管道
2.2.2 WaitNamedPipe 等待管道实例是否可用
1 2 3 4 5 6 7 8 9 10 11 |
|