Windows管道 (Pipes)(二)

本文详细介绍了Windows命名管道的设计要素、打开模式、缓冲区管理、访问权限、重叠I/O、写透模式以及读取和等待模式。特别关注了服务端与客户端的交互和高效通信策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    上一篇介绍了匿名管道,现在介绍一下命名管道(Named Pipes)。本篇较长,建议读者朋友收藏后慢慢阅读。命名管道是需要在创建时为其命名的管道。命名管道可以是单向(One-way)的,也可以是双向(Two-way, or Duplex)的。命名管道可以有多个实例(instance),它们共享一个名称,但每个实例都有各自的缓冲区和句柄,可以同时与多个客户端通信。

    命名管道可供同一台主机上的不同进程间相互通信,也可供网络中不同主机上的进程相互通信,服务端的主机要确保server服务处于运行状态。如果不希望创建的命名管道被网络上的其他主机访问,可以设置管道的安全属性,使其拒绝被NT AUTHORITY\NETWORK账户访问。

    创建命名管道实例的进程叫服务端,连接到命名管道实例的进程叫客户端。只要能通过安全检查,任何进程都可以访问命名管道。

    服务端用CreateNamedPipe()函数创建命名管道的实例,再用ConnectNamedPipe()函数接受客户端的连接。客户端用CreateFile()函数或CallNamedPipe()函数连接到命名管道。

下面从命名管道的设计、操作等方面对命名管道进行简要介绍。

一、命名管道的设计

命名管道功能强大,创建时需从多方面定义,都体现在CreateNamedPipe()函数的输入参数中。

CreateNamedPipe()原型如下:

HANDLE CreateNamedPipe(

[in]   DWORD             lpName,

[in]   DWORD              dwOpenMode,

[in]   DWORD              dwPipeMode,

[in]   DWORD              nMaxInstances,

[in]   DWORD              nOutBufferSize,

[in]   DWORD              nInBufferSize,

[in]   DWORD               nDefaultTimeOut,

[in,optional] LPSECURITY_ATTRIBUTES    lpSecurityAttributes

);

在使用命名管道前要有一个总体规划,可提前填写以下工作表:

名称

缓冲区大小

打开模式

(OpenMode)

AccessMode

PIPE_ACCESS_INBOUND

PIPE_ACCESS_OUTBOUND

PIPE_ACCESS_DUPLEX

OverlappedMode

YES

NO

Wri

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值