CallNamedPipeA 函数 (winbase.h)
连接到消息类型管道 (,并等待管道实例不可用) ,写入管道并从管道读取,然后关闭管道。
语法
BOOL CallNamedPipeA(
[in] LPCSTR lpNamedPipeName,
[in] LPVOID lpInBuffer,
[in] DWORD nInBufferSize,
[out] LPVOID lpOutBuffer,
[in] DWORD nOutBufferSize,
[out] LPDWORD lpBytesRead,
[in] DWORD nTimeOut
);
参数
[in] lpNamedPipeName
管道名称。
[in] lpInBuffer
要写入管道的数据。
[in] nInBufferSize
写入缓冲区的大小(以字节为单位)。
[out] lpOutBuffer
指向接收从管道读取的数据的缓冲区的指针。
[in] nOutBufferSize
读取缓冲区的大小(以字节为单位)。
[out] lpBytesRead
指向变量的指针,该变量接收从管道读取的字节数。
[in] nTimeOut
等待命名管道可用的毫秒数。 除了数值之外,还可以指定以下特殊值。
值 | 含义 |
---|---|
|
不等待命名管道。 如果命名管道不可用,函数将返回错误。 |
|
无限期等待。 |
|
使用对 CreateNamedPipe 函数的调用中指定的默认超时。 |
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
如果服务器进程写入管道的消息长于 nOutBufferSize,则 CallNamedPipe 返回 FALSE,GetLastError 返回ERROR_MORE_DATA。 消息的其余部分将被丢弃,因为 CallNamedPipe 在返回之前会关闭管道的句柄。
注解
如果 CreateFile 无法立即) 、TransactNamedPipe 和 CloseHandle 函数打开管道,则调用 CallNamedPipe 等效于调用 CreateFile (或 WaitNamedPipe。 使用访问标志GENERIC_READ调用 CreateFile |GENERIC_WRITE,以及 FALSE 的继承句柄标志。
如果管道是字节类型管道,则 CallNamedPipe 将失败。
Windows 10版本 1709:管道仅在应用容器中受支持;即,从一个 UWP 进程到属于同一应用的另一个 UWP 进程。 此外,命名管道必须为管道名称使用 语法 \\.\pipe\LOCAL\
。
示例
有关示例,请参阅 命名管道上的事务。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 专业版 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |