Main library implementation (internal object). More...
Classes | |
struct | Stage |
Structure representing each stage in the pipe. More... | |
Public Member Functions | |
void | set_debug_level (enum ExecPipe::DebugLevel dl) |
Change the current debug level. The default is DL_ERROR. | |
void | set_debug_output (void(*output)(const char *line)) |
Change output function for debug messages. | |
ExecPipeImpl () | |
Create a new pipe implementation with zero reference counter. | |
unsigned int & | refs () |
Return writable reference to counter. | |
void | input_source_write (const void *data, unsigned int datalen) |
Function called by PipeSource::write() to push data into the ring buffer. | |
void | stage_function_write (unsigned int st, const void *data, unsigned int datalen) |
Function called by PipeSource::write() to push data into the ring buffer. | |
void | run () |
Run the configured pipe sequence and wait for all children processes to complete. | |
Input Selectors | |
void | set_input_fd (int fd) |
Assign an already opened file descriptor as input stream for the first exec stage. | |
void | set_input_file (const char *path) |
Assign a file as input stream source. | |
void | set_input_string (const std::string *input) |
Assign a std::string as input stream source. | |
void | set_input_source (PipeSource *source) |
Assign a PipeSource as input stream source. | |
Output Selectors | |
void | set_output_fd (int fd) |
Assign an already opened file descriptor as output stream for the last exec stage. | |
void | set_output_file (const char *path, int mode=0666) |
Assign a file as output stream destination. | |
void | set_output_string (std::string *output) |
Assign a std::string as output stream destination. | |
void | set_output_sink (PipeSink *sink) |
Assign a PipeSink as output stream destination. | |
Add Pipe Stages | |
unsigned int | size () const |
Return the number of pipe stages added. | |
void | add_exec (const char *prog) |
Add an exec() stage to the pipe with given arguments. | |
void | add_exec (const char *prog, const char *arg1) |
Add an exec() stage to the pipe with given arguments. | |
void | add_exec (const char *prog, const char *arg1, const char *arg2) |
Add an exec() stage to the pipe with given arguments. | |
void | add_exec (const char *prog, const char *arg1, const char *arg2, const char *arg3) |
Add an exec() stage to the pipe with given arguments. | |
void | add_exec (const std::vector< std::string > *args) |
Add an exec() stage to the pipe with given arguments. | |
void | add_execp (const char *prog) |
Add an execp() stage to the pipe with given arguments. | |
void | add_execp (const char *prog, const char *arg1) |
Add an execp() stage to the pipe with given arguments. | |
void | add_execp (const char *prog, const char *arg1, const char *arg2) |
Add an execp() stage to the pipe with given arguments. | |
void | add_execp (const char *prog, const char *arg1, const char *arg2, const char *arg3) |
Add an execp() stage to the pipe with given arguments. | |
void | add_execp (const std::vector< std::string > *args) |
Add an execp() stage to the pipe with given arguments. | |
void | add_exece (const char *path, const std::vector< std::string > *argsp, const std::vector< std::string > *envp) |
Add an exece() stage to the pipe with the given arguments and environments. | |
void | add_function (PipeFunction *func) |
Add a function stage to the pipe. | |
Inspect Return Codes | |
int | get_return_status (unsigned int stageid) const |
Get the return status of exec() stage's program run after pipe execution as indicated by wait(). | |
int | get_return_code (unsigned int stageid) const |
Get the return code of exec() stage's program run after pipe execution, or -1 if the program terminated abnormally. | |
int | get_return_signal (unsigned int stageid) const |
Get the signal of the abnormally terminated exec() stage's program run after pipe execution, or -1 if the program terminated normally. | |
bool | all_return_codes_zero () const |
Return true if the return code of all exec() stages were zero. | |
Protected Member Functions | |
void | exec_stage (const Stage &stage) |
Transform arguments and launch an exec stage using the correct exec() variant. | |
void | print_exec (const std::vector< std::string > &args) |
Print all arguments of exec() call. | |
void | sclose (int fd) |
Safe close() call and output error if fd was already closed. | |
Private Types | |
enum | StreamType { ST_NONE = 0, ST_FD, ST_FILE, ST_STRING, ST_OBJECT } |
Enumeration describing the currently set input or output stream type. More... | |
typedef std::vector< Stage > | stagelist_type |
typedef of list of pipe stages. | |
Private Attributes | |
unsigned int | m_refs |
reference counter | |
enum ExecPipe::DebugLevel | m_debug_level |
currently set debug level | |
void(* | m_debug_output )(const char *line) |
current debug line output function | |
StreamType | m_input |
describes the currently set input stream type | |
int | m_input_fd |
for ST_FD the input fd given by the user. | |
const char * | m_input_file |
for ST_FILE the path of the input file. | |
const std::string * | m_input_string |
for ST_STRING a pointer to the user-supplied std::string input stream object. | |
std::string::size_type | m_input_string_pos |
for ST_STRING the current position in the input stream object. | |
PipeSource * | m_input_source |
for ST_OBJECT the input stream source object | |
RingBuffer | m_input_rbuffer |
for ST_OBJECT the input stream ring buffer | |
StreamType | m_output |
describes the currently set input stream type | |
int | m_output_fd |
for ST_FD the output fd given by the user. | |
const char * | m_output_file |
for ST_FILE the path of the output file. | |
int | m_output_file_mode |
for ST_FILE the permission used in the open() call. | |
std::string * | m_output_string |
for ST_STRING a pointer to the user-supplied std::string output stream object. | |
PipeSink * | m_output_sink |
for ST_OBJECT the output stream source object | |
stagelist_type | m_stages |
list of pipe stages. | |
char | m_buffer [4096] |
general buffer used for read() and write() calls. |
Main library implementation (internal object).
Implementation class for stx::ExecPipe. See the documentation of the front-end class for detailed information.
Definition at line 253 of file stx-execpipe.cc.
typedef std::vector<Stage> stx::ExecPipeImpl::stagelist_type [private] |
typedef of list of pipe stages.
Definition at line 397 of file stx-execpipe.cc.
enum stx::ExecPipeImpl::StreamType [private] |
Enumeration describing the currently set input or output stream type.
Definition at line 288 of file stx-execpipe.cc.
stx::ExecPipeImpl::ExecPipeImpl | ( | ) | [inline] |
Create a new pipe implementation with zero reference counter.
Definition at line 408 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_exec | ( | const std::vector< std::string > * | args | ) | [inline] |
Add an exec() stage to the pipe with given arguments.
The vector of arguments is not copied, so it must still exist when run() is called. Note that the program called is args[0].
Definition at line 627 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_exec | ( | const char * | prog, | |
const char * | arg1, | |||
const char * | arg2, | |||
const char * | arg3 | |||
) | [inline] |
Add an exec() stage to the pipe with given arguments.
Note that argv[0] is set to prog.
Definition at line 611 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_exec | ( | const char * | prog, | |
const char * | arg1, | |||
const char * | arg2 | |||
) | [inline] |
Add an exec() stage to the pipe with given arguments.
Note that argv[0] is set to prog.
Definition at line 597 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_exec | ( | const char * | prog, | |
const char * | arg1 | |||
) | [inline] |
Add an exec() stage to the pipe with given arguments.
Note that argv[0] is set to prog.
Definition at line 584 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_exec | ( | const char * | prog | ) | [inline] |
Add an exec() stage to the pipe with given arguments.
Note that argv[0] is set to prog.
Definition at line 572 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_exece | ( | const char * | path, | |
const std::vector< std::string > * | argsp, | |||
const std::vector< std::string > * | envp | |||
) | [inline] |
Add an exece() stage to the pipe with the given arguments and environments.
This is the most flexible exec() call. The vector of arguments and environment variables is not copied, so it must still exist when run() is called. The env vector pointer may be NULL, the args vector must not be NULL. The args[0] is _not_ override with path, so you can fake program name calls.
Definition at line 726 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_execp | ( | const std::vector< std::string > * | args | ) | [inline] |
Add an execp() stage to the pipe with given arguments.
The PATH variable is search for programs not containing a slash / character. The vector of arguments is not copied, so it must still exist when run() is called. Note that the program called is args[0].
Definition at line 706 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_execp | ( | const char * | prog, | |
const char * | arg1, | |||
const char * | arg2, | |||
const char * | arg3 | |||
) | [inline] |
Add an execp() stage to the pipe with given arguments.
The PATH variable is search for programs not containing a slash / character. Note that argv[0] is set to prog.
Definition at line 688 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_execp | ( | const char * | prog, | |
const char * | arg1, | |||
const char * | arg2 | |||
) | [inline] |
Add an execp() stage to the pipe with given arguments.
The PATH variable is search for programs not containing a slash / character. Note that argv[0] is set to prog.
Definition at line 672 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_execp | ( | const char * | prog, | |
const char * | arg1 | |||
) | [inline] |
Add an execp() stage to the pipe with given arguments.
The PATH variable is search for programs not containing a slash / character. Note that argv[0] is set to prog.
Definition at line 657 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_execp | ( | const char * | prog | ) | [inline] |
Add an execp() stage to the pipe with given arguments.
The PATH variable is search for programs not containing a slash / character. Note that argv[0] is set to prog.
Definition at line 643 of file stx-execpipe.cc.
void stx::ExecPipeImpl::add_function | ( | PipeFunction * | func | ) | [inline] |
Add a function stage to the pipe.
This function object will be called in the parent process with data passing through the stage. See PipeFunction for more information.
Definition at line 746 of file stx-execpipe.cc.
bool stx::ExecPipeImpl::all_return_codes_zero | ( | ) | const [inline] |
Return true if the return code of all exec() stages were zero.
Definition at line 832 of file stx-execpipe.cc.
void stx::ExecPipeImpl::exec_stage | ( | const Stage & | stage | ) | [protected] |
Transform arguments and launch an exec stage using the correct exec() variant.
Definition at line 875 of file stx-execpipe.cc.
int stx::ExecPipeImpl::get_return_code | ( | unsigned int | stageid | ) | const [inline] |
Get the return code of exec() stage's program run after pipe execution, or -1 if the program terminated abnormally.
Definition at line 803 of file stx-execpipe.cc.
int stx::ExecPipeImpl::get_return_signal | ( | unsigned int | stageid | ) | const [inline] |
Get the signal of the abnormally terminated exec() stage's program run after pipe execution, or -1 if the program terminated normally.
Definition at line 818 of file stx-execpipe.cc.
int stx::ExecPipeImpl::get_return_status | ( | unsigned int | stageid | ) | const [inline] |
Get the return status of exec() stage's program run after pipe execution as indicated by wait().
Definition at line 791 of file stx-execpipe.cc.
void stx::ExecPipeImpl::input_source_write | ( | const void * | data, | |
unsigned int | datalen | |||
) | [inline] |
Function called by PipeSource::write() to push data into the ring buffer.
Definition at line 491 of file stx-execpipe.cc.
void stx::ExecPipeImpl::print_exec | ( | const std::vector< std::string > & | args | ) | [protected] |
Print all arguments of exec() call.
Definition at line 864 of file stx-execpipe.cc.
unsigned int& stx::ExecPipeImpl::refs | ( | ) | [inline] |
Return writable reference to counter.
Definition at line 420 of file stx-execpipe.cc.
void stx::ExecPipeImpl::run | ( | ) |
Run the configured pipe sequence and wait for all children processes to complete.
Returns a reference to *this for chaining.
This function call should be wrapped into a try-catch block as it will throw() if a system call fails.
Definition at line 926 of file stx-execpipe.cc.
void stx::ExecPipeImpl::sclose | ( | int | fd | ) | [protected] |
Safe close() call and output error if fd was already closed.
Definition at line 915 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_debug_level | ( | enum ExecPipe::DebugLevel | dl | ) | [inline] |
Change the current debug level. The default is DL_ERROR.
Definition at line 273 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_debug_output | ( | void(*)(const char *line) | output | ) | [inline] |
Change output function for debug messages.
If set to NULL (the default) the debug lines are printed to stdout.
Definition at line 280 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_input_fd | ( | int | fd | ) | [inline] |
Assign an already opened file descriptor as input stream for the first exec stage.
Definition at line 433 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_input_file | ( | const char * | path | ) | [inline] |
Assign a file as input stream source.
This file will be opened read-only and read by the first exec stage.
Definition at line 446 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_input_source | ( | PipeSource * | source | ) | [inline] |
Assign a PipeSource as input stream source.
The object will be queried via the read() function for data which is then written to the first exec stage.
Definition at line 475 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_input_string | ( | const std::string * | input | ) | [inline] |
Assign a std::string as input stream source.
The contents of the string will be written to the first exec stage. The string object is not copied and must still exist when run() is called.
Definition at line 460 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_output_fd | ( | int | fd | ) | [inline] |
Assign an already opened file descriptor as output stream for the last exec stage.
Definition at line 504 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_output_file | ( | const char * | path, | |
int | mode = 0666 | |||
) | [inline] |
Assign a file as output stream destination.
This file will be created or truncated write-only and written by the last exec stage.
Definition at line 517 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_output_sink | ( | PipeSink * | sink | ) | [inline] |
Assign a PipeSink as output stream destination.
The object will receive data via the process() function and is informed via eof()
Definition at line 545 of file stx-execpipe.cc.
void stx::ExecPipeImpl::set_output_string | ( | std::string * | output | ) | [inline] |
Assign a std::string as output stream destination.
The output of the last exec stage will be stored as the contents of the string. The string object is not copied and must still exist when run() is called.
Definition at line 532 of file stx-execpipe.cc.
unsigned int stx::ExecPipeImpl::size | ( | ) | const [inline] |
Return the number of pipe stages added.
Definition at line 563 of file stx-execpipe.cc.
void stx::ExecPipeImpl::stage_function_write | ( | unsigned int | st, | |
const void * | data, | |||
unsigned int | datalen | |||
) | [inline] |
Function called by PipeSource::write() to push data into the ring buffer.
Definition at line 765 of file stx-execpipe.cc.
char stx::ExecPipeImpl::m_buffer[4096] [private] |
general buffer used for read() and write() calls.
Definition at line 403 of file stx-execpipe.cc.
enum ExecPipe::DebugLevel stx::ExecPipeImpl::m_debug_level [private] |
currently set debug level
Definition at line 265 of file stx-execpipe.cc.
void(* stx::ExecPipeImpl::m_debug_output)(const char *line) [private] |
current debug line output function
Definition at line 268 of file stx-execpipe.cc.
StreamType stx::ExecPipeImpl::m_input [private] |
describes the currently set input stream type
Definition at line 298 of file stx-execpipe.cc.
int stx::ExecPipeImpl::m_input_fd [private] |
for ST_FD the input fd given by the user.
for ST_STRING and ST_FUNCTION the pipe write fd of the parent process.
Definition at line 304 of file stx-execpipe.cc.
const char* stx::ExecPipeImpl::m_input_file [private] |
for ST_FILE the path of the input file.
Definition at line 307 of file stx-execpipe.cc.
RingBuffer stx::ExecPipeImpl::m_input_rbuffer [private] |
for ST_OBJECT the input stream ring buffer
Definition at line 320 of file stx-execpipe.cc.
PipeSource* stx::ExecPipeImpl::m_input_source [private] |
for ST_OBJECT the input stream source object
Definition at line 317 of file stx-execpipe.cc.
const std::string* stx::ExecPipeImpl::m_input_string [private] |
for ST_STRING a pointer to the user-supplied std::string input stream object.
Definition at line 311 of file stx-execpipe.cc.
std::string::size_type stx::ExecPipeImpl::m_input_string_pos [private] |
for ST_STRING the current position in the input stream object.
Definition at line 314 of file stx-execpipe.cc.
StreamType stx::ExecPipeImpl::m_output [private] |
describes the currently set input stream type
Definition at line 325 of file stx-execpipe.cc.
int stx::ExecPipeImpl::m_output_fd [private] |
for ST_FD the output fd given by the user.
for ST_STRING and ST_FUNCTION the pipe read fd of the parent process.
Definition at line 329 of file stx-execpipe.cc.
const char* stx::ExecPipeImpl::m_output_file [private] |
for ST_FILE the path of the output file.
Definition at line 332 of file stx-execpipe.cc.
int stx::ExecPipeImpl::m_output_file_mode [private] |
for ST_FILE the permission used in the open() call.
Definition at line 335 of file stx-execpipe.cc.
PipeSink* stx::ExecPipeImpl::m_output_sink [private] |
for ST_OBJECT the output stream source object
Definition at line 342 of file stx-execpipe.cc.
std::string* stx::ExecPipeImpl::m_output_string [private] |
for ST_STRING a pointer to the user-supplied std::string output stream object.
Definition at line 339 of file stx-execpipe.cc.
unsigned int stx::ExecPipeImpl::m_refs [private] |
reference counter
Definition at line 258 of file stx-execpipe.cc.
stagelist_type stx::ExecPipeImpl::m_stages [private] |
list of pipe stages.
Definition at line 400 of file stx-execpipe.cc.