我正在Windows上运行的C中实现命名管道IPC方案,该方案大部分都可以正常工作。 在客户端,我像这样创建管道
void CreatePipex(const lpcwstr pipename,InteruptHandler interruptHandler,unsigned char *USARTData)
{
while (1)
{
pipes [_pipeIndex].handle = CreateFile(
pipename,GENERIC_READ |
GENERIC_WRITE,NULL,OPEN_EXISTING,NULL);
// break if pipe was created
if (pipes[_pipeIndex].handle != INVALID_HANDLE_VALUE)
{
wprintf(L"created pipe %s\n",pipename);
break;
}
if (GetLastError() == ERROR_FILE_NOT_FOUND)
{
}
// exit if pipe not created and not busy
if (GetLastError() != ERROR_PIPE_BUSY)
{
wchar_t buf[256];
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),buf,(sizeof(buf) / sizeof(wchar_t)),NULL);
wprintf(L"Could not create %s : %s %d\n",pipename,GetLastError());
//printf("could not create pipe %d\n",lastError);
exit(-1);
}
if (!WaitNamedPipe(pipename,20000))
{
wprintf(L"Could not open %s: 20 second wait timed out.\n",pipename);
exit(-1);
}
}
DWORD mode = PIPE_NOWAIT;
if (!SetNamedPipeHandleState(pipes[_pipeIndex].handle,&mode,0))
{
wchar_t buf[256];
FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL);
wprintf(L"Could not set mode for %s : %s\n",buf);
exit(-1);
}
但是,如果我在没有服务器的情况下运行客户端,则无法创建客户端管道
Could not create \\.\pipe\F0 : The system cannot find the file specified.
是否可以让我的客户端等待服务器?