Question

There's a handy function in PHP called proc_open. It could be used to call an executable, opening its stdin, stdout and stderr as pipes.

Is there a good cross-platform version of this function in C++? The only googlable thing is this tutorial for Windows (though code from it just hangs).

Was it helpful?

Solution

You could probably get 'somewhere' with

OTHER TIPS

Edit:

As I can see, Boost.Process is no longer in the active development, and the examples are not compiling with the current (1.54) and not so current (1.4x - I forgot to write down the exact version before I upgraded boost) versions of boost, so I need to retract my recommendation.

Original post

There is Boost.Process library which you could use. You can find good example here. Also, check this chapter from here, as well as this.

// 
// 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; 
} 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top