windows - 求一个完整的例子,C++匿名管道在父子进程间传输数据!
黄舟
黄舟 2017-05-16 13:20:54
[C++讨论组]

在网上找了好多介绍管道的文章,可是贴出来的代码要么是片段,要么就连拼写都是错误百出,希望哪位大神能帮忙写一个完整的简单的实例,我好参考学习。
我想实现的效果:主程序创建一个子进程,执行另外一个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;
}

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号