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 e umožňují nastavit systémové proměnné (parametr envp)
funkce s p hledají program ve složkách definovaných systémovou proměnnou PATH
funkce s v argumenty předány v poli (poslední NULL)
funkce s l argumenty předány přes argumenty funkce (pohodlnější, poslední musí být stále NULL)
#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);
}