gpt4 book ai didi

c++ - 重定向子进程的输出

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:25 24 4
gpt4 key购买 nike

在我的 C++ Windows 应用程序中,我启动了多个子进程,我希望它们继承父进程的标准输出/标准错误,这样如果我的应用程序的输出被重定向到某个文件,那么该文件也将包含我的应用程序的所有子进程的输出创造。

目前我使用没有输出重定向的 CreateProcess 来做到这一点。 MSDN 有一个示例如何重定向输出:Creating a Child Process with Redirected Input and Output , 但我想看看我有什么选择。最简单的是使用系统并从等待子进程退出的阻塞线程调用它。然后所有输出都通过管道返回到父进程的标准输出/标准错误,但是在父进程中我没有机会处理来自子进程的标准输出数据。还有其他函数可以在 Windows 上启动进程:spawn , exec ,这可能更容易移植到 posix 系统。

如果我想让它在 linux/osx 上工作,我应该使用什么?如果我想让它在 UWP aka WinRT 上工作,我有什么选择? ?我可能完全同意从阻塞线程调用 system,但也许我更愿意能够对进程 PID(以便能够终止它)和进程 stdout/stderr 进行更多控制,例如,在每一行前面加上 child##:

最佳答案

boost 库最近发布了 1.64 版,其中包含一个新的 boost::process 库。

在其中,您可以使用 C++ 方法将输出重定向到管道或 asio::streambuf,您可以从中创建 std::stringstd::istream 读取您的子进程写入的任何内容。

您可以阅读 boost::process tutorials here ,其中显示了一些读取子输出的简单示例。它确实大量使用了 boost::asio,所以我强烈推荐你 read up on that也是。

关于c++ - 重定向子进程的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42655095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com