#define | RUNCMD_HAS_REDIR (1 << 0) |
| Return code bitflags for runcmd_cmd2strv()
|
|
#define | RUNCMD_HAS_SUBCOMMAND (1 << 1) |
| subcommands present
|
|
#define | RUNCMD_HAS_PAREN (1 << 2) |
| parentheses present in command
|
|
#define | RUNCMD_HAS_JOBCONTROL (1 << 3) |
| job control stuff present
|
|
#define | RUNCMD_HAS_UBSQ (1 << 4) |
| unbalanced single quotes
|
|
#define | RUNCMD_HAS_UBDQ (1 << 5) |
| unbalanced double quotes
|
|
#define | RUNCMD_HAS_WILDCARD (1 << 6) |
| wildcards present
|
|
#define | RUNCMD_HAS_SHVAR (1 << 7) |
| shell variables present
|
|
#define | RUNCMD_EFD (-1) |
| Failed to pipe() or open()
|
|
#define | RUNCMD_EALLOC (-2) |
| Failed to alloc.
|
|
#define | RUNCMD_ECMD (-3) |
| Bad command.
|
|
#define | RUNCMD_EFORK (-4) |
| Failed to fork()
|
|
#define | RUNCMD_EINVAL (-5) |
| Invalid parameters.
|
|
#define | RUNCMD_EWAIT (-6) |
| Failed to wait()
|
|
void | runcmd_init (void) |
| Initialize the runcmd library.
|
|
pid_t | runcmd_pid (int fd) |
| Return pid of a command with a specific file descriptor.
|
|
const char * | runcmd_strerror (int code) |
| Return explanation of which system call or operation failed.
|
|
int | runcmd_open (const char *cmd, int *pfd, int *pfderr, char **env, void(*iobreg)(int, int, void *), void *iobregarg) |
| Start a command from a command string.
|
|
int | runcmd_close (int fd) |
| Close a command and return its exit status.
|
|
int | runcmd_cmd2strv (const char *str, int *out_argc, char **out_argv) |
| Convert a string to a vector of arguments like a shell would.
|
|
void | runcmd_free_pids (void) |
| If you're using libnagios to execute a remote command, the static pid_t pids is not freed after runcmd_open You can call this function when you're sure pids is no longer in use, to keep down memory leaks.
|
|
runcmd library function declarations
A simple interface to executing programs from other programs, using an optimized and safer popen()-like implementation. It is considered safer in that no shell needs to be spawned for simple commands, and the environment passed to the execve()'d program is essentially empty.
This code is based on popen.c, which in turn was taken from "Advanced Programming in the UNIX Environment" by W. Richard Stevens.
Care has been taken to make sure the functions are async-safe. The exception is runcmd_init() which multithreaded applications or plugins must call in a non-reentrant manner before calling any other runcmd function.
- Note
- This is inherited from the nagiosplugins project, although it might need refactoring for performance later.