famille exec et changement variable
Bonjour
je suis bien embêté pour modifier le premier argument
que ce soit : execve,execvp,execv et execl,execlp,execle
chacun a en premier argument const char
alors j'ai bien lu le man et un autre site qui propose des exemples simples
http://pubs.opengroup.org/onlinepubs...ions/exec.html
http://www.linux-france.org/article/...3/execv-3.html
j'ai tenté avec toutes les formes primitives exec
ici je fais avec execl mais le problème je pense viens du retour de la fonction qui pourtant change bien les variables
dans une function :
Code:
1 2 3 4 5 6 7 8 9 10
| void function(char pgm[40], char *argu[])
char chem[8]="/bin/";
strcat(chem, pgm); // On concatène chem dans pgm2
argu[0] = chem;
...
// je change aussi
argu[1] = pgm;
argu[2] = parametre;
//tout se passe bien
} |
dans le programme principale:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| char *_path=NULL;
//const char *_path=NULL;// j'ai bien essayé aussi avec const mais c'est pas ça le problème
char *argv[3];
fprintf(stdout,"Nom du pg a lancer (exit pour sortir)\n: ");
fscanf(stdin, "%[^\n]", pgm);
// pour l'instant je lance juste ls pour tester donc dans function je chem n'a que taille 8 j'ai aussi pensé au problème du /0 final
function(pgm, argv);
fprintf(stdout, "on continue 1 avec : %s %s %s %s\n", argv[0],argv[1],argv[2],_path);// cela affiche bien : bin/ls ls (null) (null)
//argv[0]="/bin/ls";
_path=argv[0]; // après retour de la fonction
//_path="/bin/ls";
fprintf(stdout, "on continue 1 avec : %s %s %s %s\n", argv[0],argv[1],argv[2],_path);///cela affiche bien : bin/ls ls (null) /bin/ls
//pourtant :
execl(_path, argv[1],argv[2],NULL);// pas OK après la fonction pour la variable path
execl(_path, argv[1],argv[2],NULL);// Ok si _path="/bin/ls"; ou si argv[0]="/bin/ls"; _path=argv[0]; |
donc je ne comprend donc pas ce qui ne vas pas ?
merci à vous de m'aider à trouver une explication et une solution :)