exec
Toto je starší verze dokumentu!
Spouštění programu
exec rodina
int execl (const char *path, const char *arg, ...); int execlp (const char *file, const char *arg, ...); int execle (const char *path, const char *arg, ..., char *const envp[]); int execv (const char *path, char *const argv[]); int execvp (const char *file, char *const argv[]); int execvpe(const char *file, char *const argv[], char *const envp[]);
- první argument musí být název programu
- poslední argument musí být
(char*) NULL - funkce s
eumožňují nastavit systémové proměnné (parametr envp) - funkce s
phledají program ve složkách definovaných systémovou proměnnou PATH - funkce s
vargumenty předány v poli (poslední NULL) - funkce s
largumenty předány přes argumenty funkce (pohodlnější, poslední musí být stále NULL)
Wrapper
- hodí se pro zjištění, kdo jak volá nějakou binárku
- parametry i stdin zapisuje do syslogu
#include <syslog.h> #include <stdio.h> #include <iostream> #include <sstream> using namespace std; main( int argc, char ** argv, char ** envp ) { stringstream cmdss; cmdss << "/usr/bin/logger.back "; int i; for (i=1; i<argc; ++i) { cmdss << "'" << argv[i] << "' "; } const string &cmdstr = cmdss.str(); const char* cstr = cmdstr.c_str(); openlog ("bariwrap", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DAEMON); syslog (LOG_INFO, "cmd %s", cstr); closelog (); FILE *fp = NULL; fp = popen(cstr, "w"); if (!fp) { cerr << "Cannot execute" << endl; } for (string line; getline(cin,line);) { syslog (LOG_INFO, "line %s", line.c_str()); fwrite(line.c_str(), 1, line.length(), fp); } pclose(fp); }
exec.1509023259.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
