命名管道是一种不但能做同一机器上实现两个进程通信
还能在网络中的不同机器上的两个进程之间通信的机制
与油槽不同
命名管道传输数据是采取基于连接并且可靠的传输方式
命名管道数据只能1对1传输
创建命名管道可以调用函数CreateNamedPipe()进行创建
HANDLE CreateNamePipe(
LPCTSRT lpName,
DWORD dwOpenMode,
DWORD dwPipeMode,
DWORD nMaxInstances,
DWORD nOutBufferSize,
DWORD nInBufferSize,
DWORD nDefaultTimeOut,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
};
调用成功 返回创建的管道句柄
否则 返回 INVALID_HANDLE_VALUE
参数lpName表示创建的命名管道名称
格式为"\\.\pine\pipename"
但是,在实际编程,应将名称修改为 "\\\\.\\pipe\\pipename"
如果用户希望在不同计算机两个进程间通信
需要将名称字符串中的符号 .
修改为远程计算机的名称
dwOpenMode表示管道打开模式 包括访问模式 管道句柄的安全访问模式
以及重叠方式等
命名管道打开模式取值
模式取值
PIPE_ACCESS_DUPLEX 双向模式,服务器与客户端从命名管道中读取或写入数据
PIPE_ACCESS_INBOUND 命名管道的数据只能从客户端到服务器 即用户指定模式表示
服务器只能读取数据而客户端只能写入数据
PIPE_ACCESS_OUTBOUND 命名管道的数据只能从服务器到客户端 ,即用户指定模式表示
服务器只能写入数据而客户端只能读取
FILE_FLAG_WRITE_THROUGH 允许写直通模式。用户指定该值时,写入数据的一方要等到写入
的数据达到另一方的数据缓冲区之后,才会成功返回
FILE_FLAG_OVERLAPPED 允许使用重叠模式 模式可以使一些耗费时间的操作在后台执行,
在重叠模式下,一个线程可以在多个管道实例上同时处理输入与
输出操作
WRITE_DAC 调用线程对命名管道的任意访问控制列表都可以进行写入操作
WRITE_OWNER 调用者对命名管道所有者可进行写入操作
ACCESS_SYSTEM_SECURITY 调用者对命名管道的安全访问控制列表可以进行写入操作
参数dwPipeMode表示句柄管道的类型 读取以及等待方式
参数nMaxInstances表示管道能够促进实例的最大数目
取值范围在1~PIPE_UNLIMITED_INSTANCES
参数nOutBufferSize表示输出缓冲区大小
参数nInBufferSize表示输入缓冲区大小
参数nDefaultTimeOut表示超时值 使用同一管道不同实例必须将产生取
同样超时值
参数lpSecurityAttributes指向结构体SECURITY_ATTRIBUTES指针
表示命名管道的安全属性