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 结构的指针,该结构确定返回的句柄是否可以由子进程继承。 如果 lpPipeAttributes 为 NULL,则不能继承句柄。
结构的 lpSecurityDescriptor 成员指定新管道的安全描述符。 如果 lpPipeAttributes 为 NULL,则管道获取默认安全描述符。 管道的默认安全描述符中的 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 |