[英]Blocking pipe ConnectNamedPipe does not trigger
我想使用命名管道進行 IPC。 這是我試圖在兩個進程之間進行通信的測試客戶端/服務器客戶端代碼:
#include <iostream>
#include <Windows.h>
int main()
{
HANDLE pipe = CreateFileA("\\\\.\\pipe\\DokiDoki", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (pipe != INVALID_HANDLE_VALUE) {
char buffer[] = "DokiDoki from the other side :P";
DWORD bytesWritten;
WriteFile(pipe, static_cast<LPCVOID>(buffer), sizeof(buffer), &bytesWritten, NULL);
std::cout << "Done!\n";
CloseHandle(pipe);
}
else {
std::cout << "Could not get a handle to the pipe!\n";
return 1;
}
return 0;
}
服務器代碼:
#include <iostream>
#include <array>
#include <Windows.h>
int main()
{
char buffer[1024];
HANDLE pipe = CreateNamedPipeA("\\\\.\\pipe\\DokiDoki", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, sizeof(buffer), sizeof(buffer), NMPWAIT_USE_DEFAULT_WAIT, NULL);
while (pipe != INVALID_HANDLE_VALUE) {
if (!ConnectNamedPipe(pipe, NULL)) {
//Setting a breakpoint here will never trigger.
DWORD bytesRead = 0;
while (ReadFile(pipe, static_cast<LPVOID>(buffer), sizeof(buffer) - 1, &bytesRead, NULL)) {
std::cout << buffer << std::endl;
}
}
DisconnectNamedPipe(pipe);
}
return 0;
}
程序在 ConnectNamedPipe 處停止並且不會執行任何其他指令,即使客戶端連接並寫入 pipe 也是如此。 WriteFile(在客戶端)返回 true。
如果成功, ConnectNamedPipe將返回一個非零值,這就是它不起作用的原因。 將if (,ConnectNamedPipe(pipe, NULL))
更改為if (ConnectNamedPipe(pipe, NULL))
似乎工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.