windows - 求一个完整的例子,C++匿名管道在父子进程间传输数据!

【字号: 日期:2023-03-21浏览:22作者:雯心

问题描述

在网上找了好多介绍管道的文章,可是贴出来的代码要么是片段,要么就连拼写都是错误百出,希望哪位大神能帮忙写一个完整的简单的实例,我好参考学习。我想实现的效果:主程序创建一个子进程,执行另外一个exe程序,父进程通过匿名管道传输一个字节数组给子进程,子进程收到数据去处理。两个程序都是C++程序。运行在windows上。

问题解答

回答1:

#include <Windows.h>#include <iostream>int main(){ auto numArgs = 0; CommandLineToArgvW(GetCommandLineW(), &numArgs); if (numArgs > 1) {std::cout << '我是子进程' << std::endl;CHAR szBuffer[16]{ 0 };ReadFile(GetStdHandle(STD_INPUT_HANDLE), szBuffer, sizeof(szBuffer), nullptr, nullptr);std::cout << szBuffer << std::endl; } else {std::cout << '我是父进程' << std::endl;SECURITY_ATTRIBUTES sa{ 0 };sa.nLength = sizeof(sa);sa.bInheritHandle = TRUE;HANDLE hRead;HANDLE hWrite;CreatePipe(&hRead, &hWrite, &sa, 0);STARTUPINFOW si{ 0 };si.cb = sizeof(si);si.hStdInput = hRead;si.dwFlags = STARTF_USESTDHANDLES;PROCESS_INFORMATION pi{ 0 };WCHAR szCommand[512]{ 0 };GetModuleFileNameW(nullptr, szCommand, _countof(szCommand));wcscat(szCommand, L' test');CreateProcessW(nullptr, szCommand, nullptr, nullptr, TRUE, CREATE_NEW_CONSOLE, nullptr, nullptr, &si, &pi);WriteFile(hWrite, 'hello', 5, nullptr, nullptr); } system('pause'); return 0;}

windows - 求一个完整的例子,C++匿名管道在父子进程间传输数据!

相关文章: