Uživatelské nástroje

Nástroje pro tento web


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 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)

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)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki