Boost中是否有跨平台的exec函数?

3

我希望在C ++中执行一个子进程。我需要它在Windows和Linux上运行。 Boost库中是否有这样的功能? 做这件事的标准方式是什么?

4个回答

3

有一个尚未获得批准的 Boost.Process 库。我从未尝试过,但它可能适合你的需求。

我已经成功使用 Poco 的 Process API。


2

PocoACE都有处理进程的类。在Poco中,可以查看Foundation->Processes->Process;而在Ace中,可以查看Process.h/Process.cpp。我相信QT也有类似的东西。

至于如何实现,基本上您需要封装操作系统相关性并隐藏细节。Poco和Ace提供对比鲜明的常用方法。Poco倾向于为每个平台编写实现对象(xxx_impl),根据操作系统选择合适的实现对象。而ACE则似乎使用#ifdef代码,有时会疯狂到一定程度,不过说句公道话,我已经很久没有看过那些代码了。


1
你想要多少控制权?标准包括system(),它可以执行一个子进程。如果你想控制标准输入或标准输出,可以使用popen(尽管微软通常称之为_popen)。除非你需要比这更复杂的东西,否则你实际上不需要去别处寻找。

0

ANSI C89 system() 在两个平台上都存在。显然,该进程的功能取决于它是否在平台之间可移植。但你肯定不需要使用 boost 来完成它。


system()函数只是将命令转发到底层的shell,它不允许您读取stdout流或向stdin流发送数据。 - StackedCrooked
问题并没有要求进行stdio重定向。而且在这些平台之间,外部工具通常也无法以可移植的方式进行重定向。 - Andy Ross
如果您需要使用system(),并且想要重定向stdout或stderr,请将所有数据都管道传输到文本文件中,并稍后读取它。 - blwy10
不要调用system()函数 - 它不安全。 https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=2130132 - Puzzle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接