C Programmation

Exec System Call en C

Exec System Call en C
La famille exec a de nombreuses fonctions en C. Ces fonctions C sont essentiellement utilisées pour exécuter une commande système dans un processus distinct que le programme principal et imprimer la sortie.

Dans cet article, je vais parler de la famille de fonctions exec et vous montrer comment utiliser chacune de ces fonctions de la famille exec en C. Alors, commençons.

Fonctions du système C dans la famille Exec :

Les familles de fonctions exec sont définies dans l'en-tête unistd.h. Donc, vous devez utiliser cet en-tête sur le programme C où vous souhaitez utiliser ces fonctions.

Les fonctions d'exécution disponibles ainsi que leurs paramètres de fonction sont indiqués ci-dessous :

Voyons ce que chacune de ces fonctions fait et comment les utiliser.

Fonction système execl() :

Dans execl(), la fonction système prend le chemin du fichier binaire exécutable (i.e. /bin/ls) comme premier et deuxième arguments. Ensuite, les arguments (i.e. -lh, /domicile) que vous souhaitez passer à l'exécutable suivi de NUL. Ensuite, la fonction système execl() exécute la commande et imprime la sortie. Si une erreur se produit, alors execl() renvoie -1. Sinon, il ne renvoie rien.

Syntaxe:

int execl(const char *chemin, const char *arg,… , NULL);

Un exemple de la fonction système execl() est donné ci-dessous :

#inclure
 
int main(void)
char * cheminbinaire = "/bin/ls" ;
char *arg1 = "-lh";
char *arg2 = "/home" ;
 
execl(cheminbinaire, cheminbinaire, arg1, arg2, NULL);
 
renvoie 0 ;

j'ai couru le ls -lh /home commande utilisant la fonction système execl(). Comme vous pouvez le voir, le résultat correct est affiché.

Fonction système execlp() :

execl() n'utilise pas le CHEMIN variable d'environnement. Ainsi, le chemin complet du fichier exécutable est requis pour l'exécuter avec execl(). execlp() utilise la variable d'environnement PATH. Ainsi, si un fichier exécutable ou une commande est disponible dans le PATH, alors la commande ou le nom de fichier est suffisant pour l'exécuter, le chemin complet n'est pas nécessaire.

Syntaxe:

int execlp(const char *file, const char *arg,… , NULL );

Nous pouvons réécrire l'exemple execl() en utilisant la fonction système execlp() comme suit :

#inclure
 
int main(void)
char *nomprogramme = "ls";
char *arg1 = "-lh";
char *arg2 = "/home" ;
 
execlp(nom du programme, nom du programme, arg1, arg2, NULL);
 
renvoie 0 ;

je n'ai passé que le nom de la commande ls, pas le chemin complet /bin/ls. Comme vous pouvez le voir, j'ai le même résultat qu'avant.

Fonction système execv() :

Dans la fonction execl(), les paramètres du fichier exécutable sont passés à la fonction en tant qu'arguments différents. Avec execv(), vous pouvez passer tous les paramètres dans un tableau terminé par NULL argv. Le premier élément du tableau doit être le chemin du fichier exécutable. Sinon, la fonction execv() fonctionne comme la fonction execl().

Syntaxe:

int execv(const char *chemin, char *const argv[]);

Nous pouvons réécrire l'exemple execl() comme suit :

#inclure
 
int main(void)
char * cheminbinaire = "/bin/ls" ;
char *args[] = binaryPath, "-lh", "/home", NULL ;
 
execv(cheminbinaire, arguments);
 
renvoie 0 ;

Comme vous pouvez le voir, j'obtiens le bon résultat.

Fonction système execvp() :

Fonctionne de la même manière que la fonction système execv(). Mais, la variable d'environnement PATH est utilisée. Ainsi, le chemin complet du fichier exécutable n'est pas requis comme dans execlp().

Syntaxe:

int execvp(const char *fichier, char *const argv[]);

Nous pouvons réécrire l'exemple execv() comme suit :

#inclure
 
int main(void)
char *nomprogramme = "ls";
char *args[] = nomprogramme, "-lh", "/home", NULL ;
 
execvp(nomprogramme, args);
 
renvoie 0 ;

Comme vous pouvez le voir, la sortie correcte est affichée.

Fonction système execle() :

Fonctionne comme execl() mais vous pouvez fournir vos propres variables d'environnement avec. Les variables d'environnement sont passées sous forme de tableau envp. Le dernier élément de la envp le tableau doit être NULL. Tous les autres éléments contiennent les paires clé-valeur sous forme de chaîne.

Syntaxe:

int execle(const char *chemin, const char *arg,… , NULL, char * const envp[] );

Un exemple de la fonction système execle() est donné ci-dessous :

#inclure
 
int main(void)
char *cheminbinaire = "/bin/bash" ;
char *arg1 = "-c";
char *arg2 = "echo "Visitez $HOSTNAME:$PORT depuis votre navigateur."" ;
char *const env[] = "HOSTNAME=www.astuce linux.com", "PORT=8080", NULL ;
 
execle (chemin binaire, chemin binaire, arg1, arg2, NULL, env);
 
renvoie 0 ;

J'ai passé deux variables d'environnement NOM D'HTE et PORT à la fonction execle(). Comme vous pouvez le voir, je peux y accéder depuis l'exécutable /bin/bash.

Fonction système execve() :

Tout comme execle(), vous pouvez fournir vos propres variables d'environnement avec execve(). Vous pouvez également passer des arguments sous forme de tableaux comme vous l'avez fait dans execv().

Syntaxe:

int execve(const char *fichier, char *const argv[], char *const envp[]);

L'exemple execle() peut être réécrit comme suit :

#inclure
 
int main(void)
char *cheminbinaire = "/bin/bash" ;
char *const args[] = binaryPath, "-c", "echo "Visitez $HOSTNAME:$PORT
depuis votre navigateur."", NUL;
char *const env[] = "HOSTNAME=www.astuce linux.com", "PORT=8080", NULL ;
 
execve(binaryPath, args, env);
 
renvoie 0 ;

Comme vous pouvez le voir, nous obtenons le même résultat que dans l'exemple execle().

C'est ainsi que vous utilisez la famille de fonctions exec en C pour la programmation système sous Linux. Merci d'avoir lu cet article.

Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...
Comment utiliser AutoKey pour automatiser les jeux Linux
AutoKey est un utilitaire d'automatisation de bureau pour Linux et X11, programmé en Python 3, GTK et Qt. En utilisant ses fonctionnalités de script e...
Comment afficher le compteur FPS dans les jeux Linux
Les jeux Linux ont reçu une impulsion majeure lorsque Valve a annoncé la prise en charge de Linux pour le client Steam et leurs jeux en 2012. Depuis l...