【发布时间】:2011-03-30 11:53:22
【问题描述】:
使用 C++,我如何使用标准输入标准输出和标准错误启动 exe/进程?我知道如何在 .NET 中执行此操作,我记得过去使用过 popen,但 popen 似乎允许标准输入或标准输出,而不是两者,也不是全部 3。
我在 windows 上需要这个,但欢迎使用 linux 解决方案,因为我将来会在同一个项目中需要它。
【问题讨论】:
标签: c++ process stdout stdin stderr
使用 C++,我如何使用标准输入标准输出和标准错误启动 exe/进程?我知道如何在 .NET 中执行此操作,我记得过去使用过 popen,但 popen 似乎允许标准输入或标准输出,而不是两者,也不是全部 3。
我在 windows 上需要这个,但欢迎使用 linux 解决方案,因为我将来会在同一个项目中需要它。
【问题讨论】:
标签: c++ process stdout stdin stderr
便携式解决方案是boost.process
(注意:这是作为 Boost 库提出的,并在相同的许可条款下发布,但未被正式接受。另见 Where is Boost.Process?)
【讨论】:
你应该使用来自 WinApi 的CreateProcess。它将struct STARTUP_INFO 类型的对象作为参数。您可以设置对象的 hStdin、hStdout 和 hStderr 字段以将这些子进程流重定向到您想要的文件句柄(文件、管道、套接字...)
【讨论】:
我在生成进程以及读取或写入它们的流时遇到了麻烦,但后来我发现了一个很棒的 C++ 库,它非常方便。
这个开源项目名为tiny-process-library,由eidheim创建(非常感谢他)。
一个独立于平台的小型库,使其易于创建和 停止 C++ 中的新进程,以及写入标准输入和读取 来自新进程的 stdout 和 stderr。
特点
- 没有外部依赖
- 使用简单
- 独立于平台
- 使用匿名函数与 stout 和 stderr 分开读取
- 写入标准输入
- 杀死一个正在运行的进程(类 Unix 系统支持 SIGTERM)
- 正确关闭文件描述符/句柄
我在这里分享这个是因为我在几个小时后找到图书馆之前第一次来到这个帖子,所以我希望它可以为更多的读者节省一些时间。
【讨论】: