CreatePipe 函数 (namedpipeapi.h)

创建匿名管道,并将句柄返回到管道的读取和写入端。

语法

BOOL CreatePipe(
  [out]          PHANDLE               hReadPipe,
  [out]          PHANDLE               hWritePipe,
  [in, optional] LPSECURITY_ATTRIBUTES lpPipeAttributes,
  [in]           DWORD                 nSize
);

参数

[out] hReadPipe

指向接收管道读取句柄的变量的指针。

[out] hWritePipe

指向接收管道写入句柄的变量的指针。

[in, optional] lpPipeAttributes

指向 SECURITY_ATTRIBUTES 结构的指针,该结构确定返回的句柄是否可以由子进程继承。 如果 lpPipeAttributesNULL,则无法继承句柄。

lpSecurityDescriptor 结构的成员为新管道指定安全描述符。 如果 lpPipeAttributesNULL,管道将获取默认的安全描述符。 管道的默认安全描述符中的 ACL 来自创建者的主要或模拟令牌。

[in] nSize

管道的缓冲区大小(以字节为单位)。 大小只是建议;系统使用该值来计算适当的缓冲机制。 如果此参数为零,则系统使用默认缓冲区大小。

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

言论

CreatePipe 创建管道,并将指定的管道大小分配给存储缓冲区。 CreatePipe 还创建进程在对 ReadFileWriteFile 函数的后续调用中读取和写入缓冲区的句柄。

若要从管道读取,进程使用对 ReadFile 函数的调用中的读取句柄。 ReadFile 返回以下情况之一:写入操作在管道的写入端完成、请求的字节数已读取或发生错误。

当进程使用 WriteFile 写入匿名管道时,写入操作在写入所有字节之前不会完成。 如果在写入所有字节之前管道缓冲区已满,则在另一个进程或线程使用 ReadFile 使更多缓冲区可用之前,WriteFile 不会返回。

匿名管道是使用具有唯一名称的命名管道实现的。 因此,通常可以将句柄传递给匿名管道,该函数需要命名管道的句柄。

如果 CreatePipe 失败,则输出参数的内容不确定。 不应对此事件中的内容做出任何假设。

若要释放管道使用的资源,应用程序在不再需要句柄时应始终关闭句柄,这可以通过调用 CloseHandle 函数或与实例句柄关联的进程结束来完成。 请注意,管道的实例可能有多个与之关联的句柄。 关闭命名管道实例的最后一个句柄时,始终删除管道的实例。

例子

有关示例,请参阅 使用重定向的输入和输出创建子进程。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [桌面应用 |UWP 应用]
支持的最低服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 窗户
标头 namedpipeapi.h
Kernel32.lib
DLL Kernel32.dll

另请参阅

管道函数

管道概述

ReadFile

SECURITY_ATTRIBUTES

WriteFile