我正在使用Windows 10(1709
)和cygwin。这是我的代码:
#include <windows.h>
#include <stdio.h>
#include <Winbase.h>
int main()
{
HANDLE hPipe;
char buffer[1024];
DWORD dwRead;
PULONG ClientProcessId = NULL;
hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Pipe"),
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
1,
1024 * 16,
1024 * 16,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
while (hPipe != INVALID_HANDLE_VALUE)
{
if (ConnectNamedPipe(hPipe, NULL) != FALSE)
{
if (GetNamedPipeClientProcessId(hPipe, ClientProcessId) != 0)
{
printf("ID -> %lu\n", ClientProcessId);
fflush(stdout);
}
}
}
}
这是一个小测试程序,只是创建一个服务器管道并开始监听它,当有人连接时,它只打印管道客户端进程ID。
我遇到的问题是
error: ‘GetNamedPipeClientProcessId’ was not declared in this scope
if (GetNamedPipeClientProcessId(hPipe, ClientProcessId) == 0)
由于我收到了Winbase.h
,这真的很奇怪,我打开了Winbase.h
并找到了这个函数的声明:
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
WINBASEAPI
BOOL
WINAPI
GetNamedPipeClientProcessId(
_In_ HANDLE Pipe,
_Out_ PULONG ClientProcessId
);
快速谷歌搜索后,我发现WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
只是为了确定您拥有什么平台以及哪些API适合您的平台( winapifamily.h)。似乎它的功能应该可以在桌面平台上使用。
我在这里有点困惑。还有什么可能是问题?感谢。