Question

J'ai donc essentiellement un vecteur args avec 1 argument par tableau que je suis en train de passer à un appel execv () dans unix.

execv accepte deux paramètres comme ceci: int execv (chemin const char *, char * const argv []);

Quelle est la meilleure façon de convertir mon vecteur de chaînes à un tableau de pointeurs? En ce moment, je fais ce qui suit, mais quand je le lance avec par exemple, ps -f -a, ps me crie dessus en disant arguments illégaux. Toute aide est appréciée.

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: ?????
Était-ce utile?

La solution

Je pense que votre problème peut être que vous négligez de mettre un NULL à la fin du tableau. Essayez ceci:

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

Autres conseils

Les fonctions de execv fournissent un tableau de pointeurs vers des chaînes terminées par null qui représentent la liste des arguments à la disposition du nouveau programme. Le premier argument, par convention, doit pointer vers le nom de fichier associé au fichier en cours d'exécution. Le tableau de pointeurs doit se terminer par un pointeur NULL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top