使用stdin stdout和stderr启动exe /进程?

时间:2011-03-30 11:53:22

标签: c++ process stdout stdin stderr

使用C ++如何使用stdin stdout和stderr启动exe /进程?我知道如何在.NET中执行此操作并且我记得在过去使用popen但是popen似乎允许stdin或stdout不是两者而​​不是全部3。

我需要这个用于Windows,但欢迎使用linux解决方案,因为我将来需要它用于同一个项目。

3 个答案:

答案 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?