class dvwrapper { // no handler -- clashes with thread
public:
dvwrapper(); // Constructor
virtual ~dvwrapper(); // Destructor
// run process
virtual int run(const char* const path, char *const * argv);
virtual int rerun(); // run with same args
virtual int sendsignal(int sig); // Send signal to process
virtual int running() const;
virtual int delay_out(int b= 1); // blocking I/O (see fcntl(2))
virtual int delay_out() const; // default 1 ( == "normal")
ofstream *in; // connected with stdin
ifstream *out; // connected with stdout
ifstream *err; // connected with stderr
operator()();
protected:
int pid_; // process' ID
int status_; // process' status
int pipe_in_[2]; // pipe connected to stdin
int pipe_out_[2]; // pipe connected to stdout
int pipe_err_[2]; // pipe connected to stderr
char* path_;
char** argv_;
int running_; // is process still running?
int delay_out_; // blocking I/O out & err
virtual void save_args(const char* const path, char * const * argv);
virtual int set_up_pipes(); // Set up pipes declared above
virtual void close_pipes();
virtual void output_handler(const char* const); // redefine this one
virtual void error_handler(const char* const); // ,, ,, ,, ,, ,, ,,
virtual void async_error(const char* const, int len);
virtual void async_output(const char* const, int len);
char err_buf[aio_buf_size];
char out_buf[aio_buf_size];
};
slide: dvwrapper