Heim > Fragen und Antworten > Hauptteil
Ich habe im Internet viele Artikel gefunden, in denen Pipelines vorgestellt werden, aber die veröffentlichten Codes sind entweder Fragmente oder sogar die Schreibweise ist voller Fehler. Ich hoffe, ein Meister kann mir helfen, ein vollständiges und einfaches Beispiel zu schreiben, auf das ich mich beziehen kann es und lernen.
Der Effekt, den ich erzielen möchte: Das Hauptprogramm erstellt einen untergeordneten Prozess und führt ein anderes exe-Programm aus. Der übergeordnete Prozess überträgt ein Byte-Array über eine anonyme Pipe an den untergeordneten Prozess, und der untergeordnete Prozess empfängt die Daten zur Verarbeitung. Bei beiden Programmen handelt es sich um C++-Programme. Läuft unter Windows.
迷茫2017-05-16 13:22:54
#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;
}