execl est l'une des familles d'appels exec qui agissent comme un front-end pour execve. La capture d'écran suivante fait référence à man execl :
Les arguments de ces sept fonctions exec sont difficiles à retenir. Les lettres dans les noms de fonction aident quelque peu. La lettre p signifie que la fonction prend un argument de nom de fichier et utilise la variable d'environnement PATH pour trouver le fichier exécutable. La lettre l signifie que la fonction prend une liste d'arguments et est mutuellement exclusive avec la lettre v, ce qui signifie qu'elle prend un vecteur argv[]. Enfin, la lettre e signifie que la fonction prend un tableau envp[] au lieu d'utiliser l'environnement actuel.
Dans l'article "Utiliser execve", nous avons vu comment il peut être utilisé pour lancer un nouveau processus et également lui transmettre des arguments. execl lance également un nouveau processus remplaçant l'actuel. La syntaxe d'execl est :
int execl(const char *path, const char *arg, ...);
Argumentation :
chemin :Chemin vers l'exécutable qui doit être exécuté par execl.
arg… :Série de pointeurs vers les arguments qui doivent être passés à l'exécutable.
Dans execve, nous devions passer un tableau de pointeurs comme arguments, mais dans execl, nous pouvons directement passer les pointeurs comme arguments. Ces arguments doivent se terminer par NULL.
Exemple
1. Écrivons un programme simple pour imprimer les arguments qui lui sont passés.
# vi hello.c #include <stdio.h> main(int argc,char *argv[],char *envp[]){ printf("Filename: %s\n",argv[0]); printf("%s %s\n",argv[1],argv[2]); }
2. Par convention, le premier argument doit toujours être le nom du fichier et nous suivrons la même chose. Compilons ceci et nommons l'exécutable "hello"
# cc hello.c -o hello
3. Écrivons maintenant un programme pour lancer l'exécutable "hello" en utilisant execl.
# vi execl.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> main() { char *temp,*temp1,*temp2; temp="hello"; //filename temp1="Funny"; temp2="world"; execl("hello",temp,temp1,temp2,NULL); printf("Error"); }
4. Compilez le code et exécutez-le :
# cc execl.c -o execl ./execl
Sortie :
Filename: hello Funny world
Ainsi, le programme pourrait exécuter avec succès l'exécutable "hello" et lui transmettre également les arguments. Notez également que execl n'est pas retourné à la fonction appelante, sinon il aurait imprimé l'instruction "Erreur" après l'appel à execl.