# The libexecstream library

Overview Download Installation Reference News License | ## Overview Libexecstream is a C++ library that allows you to run a child process and have its input, output and error avaliable as standard C++ streams. Like this:
    #include <exec-stream.h>
    #include <string>
    ...
    try {
        exec_stream_t es( "perl", "" ); // run perl without any arguments
        es.in() << "print \"hello world\";"; // and make it print "hello world"
        es.close_in();                        // after the input was closed
        std::string hello, world;
        es.out() >> hello; // read the first word of output
        es.out() >> world; // read the second word
    }catch( std::exception const & e ) {
        std::cerr << "error: "  <<  e.what()  <<  "\n";
    }
Features: Works on Linux and Windows Uses threads Does not depend on any other non-standard library Distributed as source code only, requires you to compile and link one file into your program BSD-style license Another example:
    #include <exec-stream.h>
    ...
    exec_stream_t es;
    try {
        // run command to print network configuration, depending on the operating system
        #ifdef _WIN32
            es.start( "ipconfig", "/all" );
        #else
            es.start( "ifconfig", "-a" );
        #endif

        std::string s;
        while( std::getline( es.out(), s ).good() ) {
            // do something with s
        }
    }catch( std::exception const & e ) {
        std::cerr << "error: "  <<  e.what()  <<  "\n";
    }
For more examples see the file test/exec-stream-test.cpp in the source distribution. The interface provided by the library is documented in the reference. ## Download
Latest source release from SourceForge: | follow this link for downloading libexecstream-0.3.tar.gz
Get source from the CVS: (password is empty) | cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/libexecstream login cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/libexecstream co libexecstream
View source in the CVS: | http://cvs.sourceforge.net/viewcvs.py/libexecstream
Link to the SourceForge project page: | http://sourceforge.net/projects/libexecstream/
## Installation Libexecstream is provided in source code form only. In order to use it, you need to compile and link one file, exec-stream.cpp, into your program. On Linux, libexecstream was tested on Red Hat 9 with gcc compiler. Versions of gcc prior to 3.0 will not work. Make sure that exec-stream.h is found somewhere on the include path, compile exec-stream.cpp as usual, link your program with -lpthread. GCC must be configured with --enable-threads, which is by default on most Linux distributions. On Windows, libexecstream was tested on XP and 95 flavors with VC++ 7 compiler. VC++ 6 will not work. Make sure that exec-stream.h is found somewhere on the include path, compile exec-stream.cpp as usual, link you program with multi-threaded runtime. Example makefiles for Windows and Linux (used to build the testsute) are provided in the test directory of the source distribution. The exec-stream.cpp file includes several platform-dependent implementation files. Selection of platform-specific implementation is done at compile time: when _WIN32 macro is defined (usually by windows compiler) win32 implementation is included, when that macro is not defined, posix implementation is included. Header file exec-stream.h defines interface of the library and uses only standard C++. It does not include any platform-specific header files.