上一篇
在多进程编程中,C++管道通信是一种常见且高效的进程间通信方式。本教程将从零开始,带你了解什么是管道、如何在C++中创建和使用匿名管道,并通过完整示例代码演示父子进程之间的数据传输。无论你是刚接触系统编程的小白,还是希望巩固知识的开发者,这篇C++教程都能帮到你!

管道(Pipe)是操作系统提供的一种单向通信机制,常用于具有亲缘关系的进程之间(如父子进程)。它就像一根“水管”:一端写入数据,另一端读取数据。
在Windows和Linux系统中,管道分为两种:
本教程聚焦于匿名管道,因为它是学习进程通信最基础、最常用的方式。
下面我们将用Windows API在C++中创建一个匿名管道,让父进程向子进程发送一条消息。
#include <iostream>#include <windows.h>#include <tchar.h>int main(){ HANDLE hReadPipe, hWritePipe; SECURITY_ATTRIBUTES sa; // 初始化安全属性,允许子进程继承句柄 sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; // 创建匿名管道 if (!CreatePipe(&hReadPipe, &hWritePipe, &sa, 0)) { std::cerr << "创建管道失败!\n"; return 1; } STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = hReadPipe; // 子进程从管道读取 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); si.hStdError = GetStdHandle(STD_ERROR_HANDLE); // 启动子进程(这里以当前程序自身为例,实际可替换为其他程序) TCHAR cmdLine[] = _T("child_process.exe"); if (!CreateProcess(NULL, cmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { std::cerr << "创建子进程失败!\n"; CloseHandle(hReadPipe); CloseHandle(hWritePipe); return 1; } // 关闭父进程中不需要的读端 CloseHandle(hReadPipe); // 父进程向管道写入数据 const char* message = "Hello from parent process!\n"; DWORD bytesWritten; WriteFile(hWritePipe, message, strlen(message), &bytesWritten, NULL); // 关闭写端,通知子进程数据结束 CloseHandle(hWritePipe); // 等待子进程结束 WaitForSingleObject(pi.hProcess, INFINITE); // 清理资源 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); std::cout << "通信完成!\n"; return 0;}
子进程只需从标准输入读取即可:
#include <iostream>#include <string>int main(){ std::string input; std::getline(std::cin, input); std::cout << "子进程收到: " << input << std::endl; return 0;}
SECURITY_ATTRIBUTES.bInheritHandle = TRUE,否则子进程无法访问管道。pipe()、fork() 等函数,API不同但原理相似。通过本教程,你已经掌握了如何在C++中使用匿名管道实现父子进程间的进程间通信。这是系统编程的重要基础,也是理解更复杂通信机制(如命名管道、套接字)的前提。
记住:实践是最好的老师!尝试修改上面的代码,比如让子进程也回传数据,或传输多个消息,加深对C++管道通信的理解。如果你觉得这篇C++教程对你有帮助,欢迎分享给更多学习者!
本文由主机测评网于2025-12-25发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212389.html