PHP 中有一个方便的函数叫做proc_open
. 它可以用来调用一个可执行文件,打开它的stdin
,stdout
和stderr
管道。
C++ 中是否有该函数的良好跨平台版本?唯一可以用谷歌搜索的是这个Windows 教程(尽管它的代码只是挂起)。
你可能会得到“某处”
popen
( http://linux.die.net/man/3/popen )
pstreams 库(POSIX 进程控制) - 我之前没有这方面的经验,但它看起来很可靠,由 Jonathan Wakely 编写
升压过程(http://www.highscore.de/boost/process/,还没有升压)
Poco::Process launch
( http://www.appinf.com/docs/poco/Poco.Process.html#13423 )
static ProcessHandle launch(
const std::string & command,
const Args & args,
Pipe * inPipe,
Pipe * outPipe,
Pipe * errPipe
);
编辑:
正如我所看到的,Boost.Process 不再处于积极开发中,并且示例没有使用当前(1.54)编译并且不是那么最新(1.4x - 我在升级 boost 之前忘记写下确切的版本)版本的提升,所以我需要撤回我的建议。
原帖
您可以使用Boost.Process库。你可以在这里找到很好的例子。另外,请从此处查看本章以及此。
//
// Boost.Process
// ~~~~~~~~~~~~~
//
// Copyright (c) 2006, 2007 Julio M. Merino Vidal
// Copyright (c) 2008 Boris Schaeling
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <boost/process.hpp>
#include <string>
#include <vector>
#include <iostream>
namespace bp = ::boost::process;
bp::child start_child()
{
std::string exec = "bjam";
std::vector<std::string> args;
args.push_back("--version");
bp::context ctx;
ctx.stdout_behavior = bp::capture_stream();
return bp::launch(exec, args, ctx);
}
int main()
{
bp::child c = start_child();
bp::pistream &is = c.get_stdout();
std::string line;
while (std::getline(is, line))
std::cout << line << std::endl;
}