|
Boost : |
From: Jeff Garland (jeff_at_[hidden])
Date: 2002-07-26 16:31:14
How about this:
//usage:
systemistream s("./hello.exe"); //execute hello.cpp put results stream
std::string data;
while (getline(s,data)) {
std::cout << data << std::endl;
}
//! An input stream built from the result of running a shell command
/*! This class is intended to facilitate large scale integration by similar
* to the perl "open" command by combining the concept of an input stream
* and the common idea of a spawning a subprocess to perform a task.
*
* The class takes the definition optionally tasks the the subprocess
* execution string as the a construction argument and will automatically
* spawn the child process. Alternatively, the child process can be created
* later using the open method.
*/
class systemistream : public std::basic_istream<char, std::char_traits<char> > {
public:
systemistream(const std::string& command="");
~systemistream();
void open(const std::string& command);
void close();
private:
std::basic_filebuf<char, std::char_traits<char> >* buf_;
};
It's a bit of a hack, but it works...
Jeff
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk