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 还会创建句柄,进程在后续调用 ReadFile 和 WriteFile 函数时使用该句柄从缓冲区读取和写入缓冲区。

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

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

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

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

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

示例

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

要求

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

另请参阅

管道函数

管道概述

ReadFile

SECURITY_ATTRIBUTES

WriteFile