Windows – Auf der Suche nach einem vollständigen Beispiel: Die anonyme C++-Pipe überträgt Daten zwischen übergeordneten und untergeordneten Prozessen!
黄舟
黄舟 2017-05-16 13:20:54
0
1
978

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.

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

Antworte allen(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;
}

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage