window c++ 两个进程之间如何通过命名管道传递消息实例
时间: 2024-01-27 13:03:36 浏览: 23
下面是一个简单的例子,演示了如何在两个进程之间使用命名管道传递消息。
首先,我们需要创建一个命名管道,代码如下:
```c++
HANDLE hPipe;
LPTSTR lpPipeName = TEXT("\\\\.\\pipe\\MyPipe");
hPipe = CreateNamedPipe(lpPipeName, PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES, 1024, 1024, NMPWAIT_USE_DEFAULT_WAIT, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
// 处理错误
}
```
在这个例子中,我们使用 `CreateNamedPipe` 函数创建了一个名为 `MyPipe` 的命名管道。管道的访问模式为双向访问,类型为消息型管道,读取模式为消息读取模式,等待模式为默认等待模式。管道的实例数量为无限制,输入缓冲区大小和输出缓冲区大小均为1024字节。
接下来,我们在一个进程中向管道中写入消息:
```c++
DWORD dwWritten;
char szMessage[] = "Hello, World!";
if (!ConnectNamedPipe(hPipe, NULL)) {
// 处理错误
}
if (!WriteFile(hPipe, szMessage, strlen(szMessage), &dwWritten, NULL)) {
// 处理错误
}
FlushFileBuffers(hPipe);
DisconnectNamedPipe(hPipe);
```
在这个例子中,我们使用 `ConnectNamedPipe` 函数等待客户端连接管道。一旦客户端连接上管道,我们通过 `WriteFile` 函数将消息写入管道。最后,我们使用 `FlushFileBuffers` 函数和 `DisconnectNamedPipe` 函数断开管道连接。
在另一个进程中,我们可以从管道中读取消息,代码如下:
```c++
HANDLE hPipe;
LPTSTR lpPipeName = TEXT("\\\\.\\pipe\\MyPipe");
hPipe = CreateFile(lpPipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
// 处理错误
}
char szMessage[1024];
DWORD dwRead;
if (!ReadFile(hPipe, szMessage, sizeof(szMessage), &dwRead, NULL)) {
// 处理错误
}
printf("Received message: %s\n", szMessage);
CloseHandle(hPipe);
```
在这个例子中,我们使用 `CreateFile` 函数连接到名为 `MyPipe` 的命名管道。一旦连接成功,我们可以使用 `ReadFile` 函数从管道中读取消息。最后,我们通过 `printf` 函数打印出收到的消息,并关闭管道连接。
这就是一个简单的例子,演示了如何在两个进程之间使用命名管道传递消息。