Domanda

Quindi, io in fondo ho un args vettoriali con 1 argomento per array che sto cercando di passare a una chiamata execv () in UNIX.

execv accetta due parametri in questo modo: int execv (const percorso char *, char * const argv []);

Qual è il modo migliore per convertire il mio vettore di stringhe a un array di puntatori? In questo momento sto facendo il seguente, ma quando l'eseguo con dire, ps -a -f, ps grida a me dicendo argomento illegale. Ogni aiuto è apprezzato.

vector<string> args = tokenize(cmd);
char * arg[args.size()];
for(int j=0; j<args.size();j++)
{
        arg[j] = (char*)args[j].c_str();    
}
retval = execv(args[0].c_str(), arg);

.

>ps

  PID TTY           TIME CMD
  635 ttys000    0:00.18 -bash
16106 ttys000    0:00.00 ./test cpp
12590 ttys001    0:00.02 -bash
>ps -a

ps: illegal argument: ?????
È stato utile?

Soluzione

Credo che il problema potrebbe essere che si sta trascurando di mettere un NULL alla fine della matrice. Prova questo:

char * arg[args.size()+1];
arg[args.size()] = NULL;
for (int j=0; [...]

Altri suggerimenti

Le funzioni execv fornire una serie di puntatori a stringhe null-terminated che rappresentano la lista degli argomenti a disposizione del nuovo programma. Il primo argomento, per convenzione, deve puntare al nome del file associato con l'essere eseguito il file. L'array di puntatori deve essere terminata da un puntatore NULL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top