使用C ++如何使用stdin stdout和stderr启动exe /进程?我知道如何在.NET中执行此操作并且我记得在过去使用popen但是popen似乎允许stdin或stdout不是两者而不是全部3。
我需要这个用于Windows,但欢迎使用linux解决方案,因为我将来需要它用于同一个项目。
答案 0 :(得分:2)
你应该使用WinApi中的CreateProcess。它将struct STARTUP_INFO
类型的对象作为参数。您可以设置对象的hStdin,hStdout和hStderr字段,将这些子进程流重定向到您想要的文件句柄(文件,管道,套接字......)
答案 1 :(得分:2)
我遇到了产卵过程以及读取或写入其流的麻烦,但后来我发现了一个很棒的C ++库非常方便。
这个开源项目名为tiny-process-library,由eidheim创建(非常感谢他)。
独立于小型平台的库,使其易于创建和使用 在C ++中停止新进程,以及写入stdin和阅读 来自stdout和stderr的新流程。
功能
- 没有外部依赖
- 简单易用
- 独立于平台
- 使用匿名函数
分别从stout和stderr中读取- 写给stdin
- 终止正在运行的进程(类Unix系统支持SIGTERM)
- 正确关闭文件描述符/句柄
我在这里分享这个,因为我在几个小时后找到这个库之前首先来到这个帖子,所以我希望它可以节省一些时间给更多的读者。
答案 2 :(得分:1)
便携式解决方案是boost.process
(注意:这已被提议作为Boost库,并以相同的许可条款发布,但未正式接受。另请参阅Where is Boost.Process?)