L'appel système `execlp()` sous Linux est utilisé pour exécuter un programme, en remplaçant le processus en cours d'exécution par le nouveau programme. Le « lp » dans `execlp()` signifie « liste de pointeurs », qui fait référence aux arguments passés au nouveau programme. Voici une explication détaillée du fonctionnement de `execlp()` :
Prototype :
```c
int execlp(const char *fichier, const char *arg0, ..., const char *argn, (char *) NULL);
```
Arguments :
- `file` :Il s'agit du chemin d'accès au fichier exécutable ou au programme que vous souhaitez exécuter.
- `arg0`, `...,` `argn` :ce sont des pointeurs vers des chaînes terminées par un caractère nul représentant les arguments de ligne de commande à transmettre au nouveau programme. « arg0 » doit toujours être le nom du programme lui-même.
- `(char *) NULL` :Il s'agit d'un pointeur nul obligatoire à la fin de la liste des arguments. Il sert de délimiteur pour indiquer la fin de la liste d'arguments.
Description :
- `execlp()` est une variante de l'appel système `execl()` qui utilise une manière simplifiée mais flexible de transmettre des arguments au nouveau programme. Il recherche automatiquement le fichier exécutable dans les répertoires spécifiés par la variable d'environnement `PATH`.
- Lorsque `execlp()` est appelé, le processus en cours d'exécution est remplacé par le nouveau programme spécifié par `file`. Les arguments `arg0`, `...,` `argn` sont transmis comme arguments de ligne de commande au nouveau programme.
- `execlp()` ne revient pas au processus appelant. Au lieu de cela, il transfère le contrôle au nouveau programme, qui commence son exécution. S'il y a des erreurs lors de l'exécution de `execlp()`, telles que le fichier exécutable introuvable ou des autorisations insuffisantes, l'appel `execlp()` échouera et retournera -1, laissant le processus en cours inchangé.
Exemple :
```c
#include
#include
int main() {
// Exécute la commande "ls -l"
execlp("ls", "ls", "-l", (char *) NULL);
// Cette ligne ne s'exécutera que si execlp() échoue
perror("execlp() a échoué");
renvoie 0 ;
}
```
Dans cet exemple, l'appel système `execlp()` exécute la commande "ls -l", qui répertorie les fichiers du répertoire courant avec des informations détaillées. Si `execlp()` réussit, la commande "ls -l" sera exécutée et le contrôle sera transféré au programme `ls`. Si `execlp()` rencontre une erreur, la fonction `perror()` imprimera un message d'erreur dans le flux d'erreur standard ("stderr").
Points importants :
- `execlp()` est l'une des nombreuses fonctions de la famille `exec()` sous Linux qui effectuent la même tâche d'exécution de nouveaux programmes mais avec des mécanismes de gestion des arguments différents. D'autres fonctions `exec()` courantes incluent `execl()`, `execv()`, `execvp()` et `execve()`.
- `execlp()` recherche uniquement l'exécutable dans les répertoires spécifiés par la variable d'environnement `PATH`, il est donc essentiel de s'assurer que l'exécutable est présent dans l'un de ces répertoires.
- Les arguments `arg0`, `...,` `argn` doivent être des chaînes terminées par un caractère nul. Passer des chaînes non terminées par un caractère nul ou tenter de transmettre plus d'arguments que la fonction ne peut en gérer peut conduire à un comportement indéfini.
- L'appel système `execlp()` est utilisé dans de nombreux systèmes d'exploitation de type Unix, pas seulement Linux.
|