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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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