命名管道模式

【勇芳软件工作室】汉化HomePreviousNext

与命名管道或与命名管道的句柄相关联的多个模式会影响管道的使用和行为。这些模式中的一些可以针对管道的每个手柄设置不同,而其他模式对于管道的所有手柄必须相同。

服务器进程在调用CreateNamedPipe功能时指定以下模式。管道的所有实例的类型和访问模式必须相同。

模式含义
类型PIPE_TYPE_BYTE或PIPE_TYPE_MESSAGE。类型模式确定数据是作为消息流还是作为字节流写入命名管道。如果在CreateNamedPipe中未指定类型,则默认值为PIPE_TYPE_BYTE。字节管道的句柄必须是字节读取模式。消息管道的句柄可以是字节读取或消息读取模式。有关管道类型的更多信息,请参阅命名管道类型和读取模式.
访问PIPE_ACCESS_INBOUND,PIPE_ACCESS_OUTBOUND或PIPE_ACCESS_DUPLEX。此模式相当于指定服务器对管道的句柄的读取或写入访问,其中入站等效于GENERIC_READ访问,出站等效于GENERIC_WRITE访问,而双工相当于GENERIC_READ | GENERIC_WRITE访问。使用CreateFile功能连接到命名管道的客户端进程必须指定与服务器指定的访问兼容的访问。例如,客户端必须为出站管道指定GENERIC_READ访问。

每个管道手柄的剩余管道模式可能不同。这意味着同一个管道实例的客户端和服务器端可以使用不同的模式。CreateNamedPipe设置服务器管道句柄的所有这些模式。CreateFile支持为客户端的管道控制设置重叠和直写模式。客户端和服务器进程都使用SetNamedPipeHandleState函数来设置管道句柄的读取和等待模式。

模式含义
PIPE_READMODE_BYTE或PIPE_READMODE_MESSAGE。在字节读取模式下,数据作为字节流从命名管道读取。在消息读取模式下,数据作为消息流从命名管道读取。字节型管道只能使用字节读取模式。消息类型管道允许字节读取或消息读取模式。如果在CreateNamedPipe中未指定读取模式,则默认为字节型模式。有关读取模式的更多信息,请参阅命名管道类型和读取模式.
等待PIPE_WAIT或PIPE_NOWAIT。在阻塞等待模式下,在某些情况下,管道另一端的进程可以无限期地等待ReadFileWriteFileConnectNamedPipe执行操作。在非阻塞等待模式下,如果不能立即完成操作,则返回该函数。有关等待模式的详细信息,请参阅阻塞和非阻塞管道操作.
重叠FILE_FLAG_OVERLAPPED.在重叠模式下,执行读取,写入和连接操作的功能需要大量时间才能完成,可以立即返回。这使线程在后台执行耗时的操作时执行其他操作。有关重叠模式的详细信息,请参阅同步和重叠输入和输出.
直写式FILE_FLAG_WRITE_THROUGH.在直写模式下,写入命名管道的功能不会返回,直到写入的数据通过网络传输到远程计算机上的管道缓冲区中。此模式仅影响字节类型管道上的写操作,然后只影响客户端和服务器进程在不同的计算机上。如果没有启用直写模式,即使没有发送数据,写功能也会成功返回。有关直写模式的更多信息,请参阅直写到远程客户端.

当服务器进程调用CreateNamedPipe时,指定管理句柄的初始读取模式。如果指定了PIPE_READMODE_BYTE或未指定读取模式,则以句柄读取模式创建管道句柄。如果指定了PIPE_READMODE_MESSAGE和PIPE_TYPE_MESSAGE,则在消息读取模式下创建句柄。对于客户端进程,CreateFile返回的管道句柄始终处于字节读取模式。客户端和服务器进程都可以使用SetNamedPipeHandleState功能来更改管道句柄的读取模式。对于消息类型的管道,同一管道实例的服务器和客户机句柄的读取模式可能不同。