recherche

Maison  >  Questions et réponses  >  le corps du texte

Windows - À la recherche d'un exemple complet, le canal anonyme C++ transmet des données entre les processus parent et enfant !

J'ai trouvé beaucoup d'articles présentant les pipelines sur Internet, mais les codes publiés sont soit des fragments, soit même l'orthographe est pleine d'erreurs. J'espère qu'un maître pourra m'aider à écrire un exemple complet et simple auquel je puisse m'y référer. et apprenez.
L'effet que je souhaite obtenir : le programme principal crée un processus enfant et exécute un autre programme exe. Le processus parent transmet un tableau d'octets au processus enfant via un canal anonyme, et le processus enfant reçoit les données à traiter. Les deux programmes sont des programmes C++. Fonctionne sous Windows.

黄舟黄舟2753 Il y a quelques jours974

répondre à tous(1)je répondrai

  • 迷茫

    迷茫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;
    }

    répondre
    0
  • Annulerrépondre