Execute a program and give access to its io An object of this class encapsulates the execution of an external program. It starts the program using fork and some exec.. call, gives you access to the program's stdio and closes the program after use. More...
#include <ExternalProgram.h>
Public Types | |
enum | Stderr_Disposition { Normal_Stderr, Discard_Stderr, Stderr_To_Stdout, Stderr_To_FileDesc } |
typedef std::map< std::string, std::string > | Environment |
Public Member Functions | |
ExternalProgram (std::string commandline, Stderr_Disposition stderr_disp=Normal_Stderr, bool use_pty=false, int stderr_fd=-1, bool default_locale=false, const Pathname &root="", bool pty_trans=true) | |
ExternalProgram (const char *const *argv, Stderr_Disposition stderr_disp=Normal_Stderr, bool use_pty=false, int stderr_fd=-1, bool default_locale=false, const Pathname &root="", bool pty_trans=true) | |
ExternalProgram (const char *const *argv, const Environment &environment, Stderr_Disposition stderr_disp=Normal_Stderr, bool use_pty=false, int stderr_fd=-1, bool default_locale=false, const Pathname &root="", bool pty_trans=true) | |
ExternalProgram (const char *binpath, const char *const *argv_1, bool use_pty=false, bool pty_trans=true) | |
ExternalProgram (const char *binpath, const char *const *argv_1, const Environment &environment, bool use_pty=false, bool pty_trans=true) | |
~ExternalProgram () | |
int | close () |
bool | kill () |
bool | running () |
pid_t | getpid () |
Static Public Member Functions | |
static void | renumber_fd (int origfd, int newfd) |
Protected Member Functions | |
int | checkStatus (int) |
Private Member Functions | |
void | start_program (const char *const *argv, const Environment &environment, Stderr_Disposition stderr_disp=Normal_Stderr, int stderr_fd=-1, bool default_locale=false, const char *root=NULL) |
bool | disableCRLFTranslation (int fd) |
Private Attributes | |
bool | use_pty |
bool | disable_pty_trans |
pid_t | pid |
int | _exitStatus |
Execute a program and give access to its io An object of this class encapsulates the execution of an external program. It starts the program using fork and some exec.. call, gives you access to the program's stdio and closes the program after use.
typedef std::map<std::string,std::string> ExternalProgram::Environment |
For passing additional environment variables to set
ExternalProgram::ExternalProgram | ( | std::string | commandline, | |
Stderr_Disposition | stderr_disp = Normal_Stderr , |
|||
bool | use_pty = false , |
|||
int | stderr_fd = -1 , |
|||
bool | default_locale = false , |
|||
const Pathname & | root = "" , |
|||
bool | pty_trans = true | |||
) |
Start the external program by using the shell /bin/sh
with the option
-c
. You can use io direction symbols < and >.
commandline | a shell commandline that is appended to /bin/sh -c . | |
default_locale | whether to set LC_ALL=C before starting | |
root | directory to chroot into, / or empty to not chroot |
References Pathname::asString(), Pathname::empty(), and start_program().
ExternalProgram::ExternalProgram | ( | const char *const * | argv, | |
Stderr_Disposition | stderr_disp = Normal_Stderr , |
|||
bool | use_pty = false , |
|||
int | stderr_fd = -1 , |
|||
bool | default_locale = false , |
|||
const Pathname & | root = "" , |
|||
bool | pty_trans = true | |||
) |
Start an external program by giving the arguments as an arry of char *pointers. If environment is provided, varaiables will be added to the childs environment, overwriting existing ones.
References Pathname::asString(), Pathname::empty(), and start_program().
ExternalProgram::ExternalProgram | ( | const char *const * | argv, | |
const Environment & | environment, | |||
Stderr_Disposition | stderr_disp = Normal_Stderr , |
|||
bool | use_pty = false , |
|||
int | stderr_fd = -1 , |
|||
bool | default_locale = false , |
|||
const Pathname & | root = "" , |
|||
bool | pty_trans = true | |||
) |
References Pathname::asString(), Pathname::empty(), and start_program().
ExternalProgram::ExternalProgram | ( | const char * | binpath, | |
const char *const * | argv_1, | |||
bool | use_pty = false , |
|||
bool | pty_trans = true | |||
) |
References start_program().
ExternalProgram::ExternalProgram | ( | const char * | binpath, | |
const char *const * | argv_1, | |||
const Environment & | environment, | |||
bool | use_pty = false , |
|||
bool | pty_trans = true | |||
) |
References start_program().
ExternalProgram::~ExternalProgram | ( | ) |
int ExternalProgram::checkStatus | ( | int | status | ) | [protected] |
int ExternalProgram::close | ( | ) | [virtual] |
Close the input and output streams.
Reimplemented from ExternalDataSource.
References _exitStatus, checkStatus(), and pid.
Referenced by PathInfo::clean_dir(), Process::closeAll(), PathInfo::copy(), PathInfo::copy_dir(), PathInfo::copy_file2dir(), kill(), main(), PathInfo::recursive_rmdir(), renumber_fd(), and start_program().
bool ExternalProgram::disableCRLFTranslation | ( | int | fd | ) | [private] |
References ERR.
Referenced by start_program().
pid_t ExternalProgram::getpid | ( | ) | [inline] |
bool ExternalProgram::kill | ( | ) |
void ExternalProgram::renumber_fd | ( | int | origfd, | |
int | newfd | |||
) | [static] |
origfd will be accessible as newfd and closed (unless they were equal)
References close().
Referenced by Y2ProgramComponent::launchExternalProgram(), shellcommand(), and start_program().
bool ExternalProgram::running | ( | ) |
Return whether program is running
References _exitStatus, checkStatus(), and pid.
Referenced by Process::~Process().
void ExternalProgram::start_program | ( | const char *const * | argv, | |
const Environment & | environment, | |||
Stderr_Disposition | stderr_disp = Normal_Stderr , |
|||
int | stderr_fd = -1 , |
|||
bool | default_locale = false , |
|||
const char * | root = NULL | |||
) | [private] |
References _exitStatus, close(), D__, DBG, disable_pty_trans, disableCRLFTranslation(), Discard_Stderr, ERR, ExternalDataSource::inputfile, ExternalDataSource::outputfile, pid, renumber_fd(), Stderr_To_FileDesc, Stderr_To_Stdout, and use_pty.
Referenced by ExternalProgram().
int ExternalProgram::_exitStatus [private] |
Referenced by close(), running(), and start_program().
bool ExternalProgram::disable_pty_trans [private] |
Set to true if LF to CRLF output tranformation on the pty will be disabled
Referenced by start_program().
pid_t ExternalProgram::pid [private] |
Referenced by checkStatus(), close(), getpid(), kill(), running(), and start_program().
bool ExternalProgram::use_pty [private] |
Set to true, if a pair of ttys is used for communication instead of a pair of pipes.
Referenced by start_program().