在Windows系统中,C++命名管道(Named Pipe)是一种非常强大的进程间通信(IPC)机制。它允许不同进程(甚至跨网络)之间安全、可靠地交换数据。本教程将从零开始,手把手教你如何在C++中使用命名管道进行通信,即使是编程新手也能轻松上手。

命名管道是Windows提供的一种内核对象,具有一个唯一的名称(如 \\.\pipe\MyPipe),允许服务器进程和一个或多个客户端进程通过该名称进行双向或单向通信。与匿名管道不同,命名管道支持跨进程、跨会话甚至跨网络通信。
在Windows命名管道编程中,通常包含两个角色:
确保你使用的是Windows操作系统,并安装了支持Win32 API的C++编译器(如Visual Studio)。我们需要包含以下头文件:
#include <windows.h>#include <stdio.h>#include <tchar.h>
服务器使用 CreateNamedPipe 函数创建一个命名管道。这是CreateNamedPipe教程的核心部分。
HANDLE hPipe = CreateNamedPipe( TEXT("\\.\pipe\MySamplePipe"), // 管道名称 PIPE_ACCESS_DUPLEX, // 双向访问 PIPE_TYPE_MESSAGE | // 消息类型 PIPE_READMODE_MESSAGE | // 消息读取模式 PIPE_WAIT, // 阻塞模式 1, // 最大实例数 1024 * 16, // 输出缓冲区大小 1024 * 16, // 输入缓冲区大小 0, // 默认超时 NULL // 安全属性);if (hPipe == INVALID_HANDLE_VALUE) { printf("创建命名管道失败!错误代码:%d\n", GetLastError()); return -1;}服务器调用 ConnectNamedPipe 等待客户端连接:
printf("等待客户端连接...\n");if (!ConnectNamedPipe(hPipe, NULL)) { printf("连接失败!错误代码:%d\n", GetLastError()); CloseHandle(hPipe); return -1;}printf("客户端已连接!\n");客户端使用 CreateFile 连接到命名管道:
HANDLE hPipe = CreateFile( TEXT("\\.\pipe\MySamplePipe"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);if (hPipe == INVALID_HANDLE_VALUE) { printf("无法连接到管道!错误代码:%d\n", GetLastError()); return -1;}连接成功后,双方可以使用 WriteFile 和 ReadFile 发送/接收消息:
// 服务器发送消息const char* msg = "Hello from server!";DWORD bytesWritten;WriteFile(hPipe, msg, strlen(msg) + 1, &bytesWritten, NULL);// 客户端接收消息char buffer[1024];DWORD bytesRead;ReadFile(hPipe, buffer, sizeof(buffer), &bytesRead, NULL);printf("收到消息:%s\n", buffer);1. 服务器创建命名管道并等待连接。
2. 客户端连接到该命名管道。
3. 双方通过读写操作交换数据。
4. 通信结束后,关闭句柄释放资源。
这种基于C++进程间通信的方式非常适合本地服务与客户端之间的交互,例如后台服务与前端界面的数据同步。
\\.\pipe\ 开头。CloseHandle 关闭句柄。通过本教程,你应该已经掌握了如何在Windows下使用C++命名管道实现进程间通信。无论是开发本地服务、插件系统还是调试工具,命名管道都是一种高效且可靠的解决方案。希望这篇CreateNamedPipe教程能帮助你迈出Windows命名管道编程的第一步!
本文由主机测评网于2025-12-14发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025127685.html