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

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

阅读 8.1k
3 个回答
#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;
}

图片描述

新手上路,请多包涵

上面的程序在VS下运行会出错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题