Visual C++网络编程经典案例详解 第3章 多线程与异步套接字编程 进程间通信 命名管道 创建命名管道

本文介绍命名管道作为一种进程间通信机制,不仅支持同一台计算机上的进程通信,还支持网络中不同计算机间的进程通信。文章详细解释了命名管道的工作原理、创建过程及参数设置。

命名管道是一种不但能做同一机器上实现两个进程通信
还能在网络中的不同机器上的两个进程之间通信的机制
与油槽不同
命名管道传输数据是采取基于连接并且可靠的传输方式
命名管道数据只能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指针
表示命名管道的安全属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值