Fonction execvp en c

Fonction execvp en c

La fonction execvp () appartient à la famille Exec. Dans le sujet d'aujourd'hui, nous discuterons des caractéristiques et de l'application de la fonction execvp () sous la famille Exec.

La fonction de la famille Exec en langue C nous aide à exécuter d'autres programmes dans notre programme. Pour ce faire à partir de mon programme, nous utilisons un ensemble de fonctions appelée Family Of Fonction et celles-ci sont dans le programme Linux.

Application de la fonction execvp ()

Si nous voulons exécuter un ping de programme, nous pouvons l'appliquer via la fonction execvp (). Pour cela, nous devons utiliser le tableau. La lettre «V» utilisée pour Execvp () signifie Vector.

Syntaxe

La fonction Syntaxe pour execvp ():

int execvp (fichier const char *, char * const)

Ici, le premier paramètre est un pointeur de fichiers qui pointe un fichier qui doit être exécuté dans le programme.

Le deuxième paramètre est une constante de pointeur qui est un caractère en type et va être utilisé comme terminateur nul.

Exemple de programmation 1

Ici, nous verrons comment la fonction execvp () fonctionne réellement dans notre programme.

#inclure
#inclure
#inclure
#include // y compris ce fichier pour la plate-forme Linux
int main (int argc, char * argv [])

char * ar [10] = "ping", "google.com "," - c10 ", null; // Déclaration et initialisation d'un tableau
execvp ("ping", ar);
printf ("il n'obtient aucune réponse car la fonction execvp () exécute d'abord \ n"
// Cette instruction ne s'exécute pas car execvp () prend le contrôle du programme si EXECVP a renvoyé le succès.
retour 0;

Sortir

Explication
Dans cet exemple de programmation, si nous voulons cingler le "Google.com »à l'aide de la fonction execvp () dans la plate-forme Linux, nous devons inclure un fichier d'en-tête nommé Unistd.H dans notre programme.

Pour exécuter la fonction execvp (), nous devons déclarer un tableau (réellement un tableau de chaîne) nommé AR [] et initialisé certaines valeurs comme «ping» », Google.com ”et null.

Maintenant, si nous essayons de passer le tableau d'arguments à l'intérieur de la parenthèse de la fonction execvp (), nous remarquerons qu'il pingt le ping.com comme sortie.

Exemple de programmation 2

Ici, nous montrons une autre application de la fonction execvp ().

#include // y compris ce fichier pour la plate-forme Linux
#inclure
#inclure
#inclure
int main()

char * cmd = "cd";
char * arr_ls [] = "cd", "/ root / rien", null; // Déclaration et initialisation d'un tableau
errno = 0;
int id = execvp (cmd, arr_ls);
if (id == -1)

printf ("\ nhere est le numéro d'erreur renvoyé par execvp:% d \ n", errno);
if (errno == 2)
printf ("!!Aucun fichier ou répertoire de ce nom!!\ n ");
autre
perror ("execvp");

printf ("Si execvp renvoie le succès, nous ne verrons pas cette ligne d'autre que nous verrons cette ligne. \ n ");
retour 0;

Sortir

Explication
Dans cet exemple de programmation, nous verrons si la fonction execvp () renvoie une fausse valeur. Si la fonction execvp () renvoie une fausse valeur, il a imprimé la valeur de «Errorno " qui est 2 et imprime le message qui "Aucun fichier ou répertoire de ce nom".

Si la fonction execvp () renvoie la valeur vraie, toute instruction après Execvp ne sera pas exécutée. Comme nous le savons à partir des caractéristiques de la fonction execvp (), aucune ligne n'est exécutée lorsque la fonction execvp () prend le contrôle du programme.

Exemple de programmation 3

Dans cet exemple de programmation, nous verrons l'application importante de la fonction execvp () liée à la fourche () ou au processus.

#inclure
#inclure
int main()

char * cmd = "ls";
char * arg_ls [] = "ls", "- l", null;
printf ("L'exemple de l'exécution d'une instruction avant Execvp () est invoqué \ n");
printf ("Nous introduisons un processus de plus qui indique une fourche \ n");
if (fork () == 0) // Le processus enfant est introduit qui est contrôlé par "LS-L"

int sts_cd = execvp (cmd, arg_ls);
printf ("Cette instruction s'exécute qui signifie qu'il y a un problème exécutant la commande \ n");
if (sts_cd == -1)

printf ("Erreur execvp! \ n ");
retour 1;


Else // Programme parent fonctionne ici

printf ("Cette instruction s'exécute qui signifie retour au programme principal \ n");

retour 0;

Sortir

Explication
Comme toutes les fonctions de la famille Exec en C, la fonction execvp () peut exécuter d'autres programmes dans notre programme.

Dans cet exemple de programmation, nous déclarons un tableau de caractères ou un nom de chaîne arg_ls []. À l'intérieur de cette chaîne, nous initialisons certaines valeurs et null également. Ensuite, nous appelons un autre processus appelé fork ().

Ici, la fonction execvp () renvoie la vraie valeur. Ainsi, la fonction Fork () peut exécuter avec succès son action. Sinon, alors il ira au programme principal.

Exemple de programmation 4

Ici, nous verrons une autre fonctionnalité de la fonction execvp ().

#inclure
#inclure
int main()

char * cmd = "cd";
char * arg_ls [] = "cd", "/ root / bam", null;
printf ("L'exemple de l'exécution d'une instruction avant Execvp () est invoqué \ n");
printf ("Nous introduisons un processus de plus qui indique une fourche \ n");
if (fork () == 0) // Le processus enfant est introduit qui est contrôlé par "LS-L"

int sts_cd = execvp (cmd, arg_ls);
printf ("Cette instruction s'exécute qui signifie qu'il y a un problème exécutant la commande \ n");
if (sts_cd == -1)

printf ("Erreur execvp! \ n ");
retour 1;


Else // Programme parent fonctionne ici

printf ("Cette instruction s'exécute qui signifie retour au programme principal \ n");

retour 0;

Sortir

Explication
L'exemple de programmation ci-dessus est la version modifiée de l'exemple de programmation 3. Ici, nous verrons si Function Fork () retournera '0'. Ensuite, le processus enfant exécutera son code et est contrôlé par "LS-" L commande. La valeur qui renverra execvp () est attribuée à une variable nommée STS_CD. Si STS_CD verra la valeur -1, alors nous comprendrons qu'il s'agit d'une erreur de fonction execvp (). Sinon, cette fonction prend le contrôle du reste du programme.

Conclusion

D'après la discussion ci-dessus sur la mise en œuvre de l'execvp () dans la famille Exec, nous sommes arrivés à la conclusion qu'il remplace une image de processus par une nouvelle image dans notre RAM (mémoire d'accès aléatoire) pour exécuter le nouveau processus. En fait, cette fonction aide notre système d'exploitation à gérer tous les processus prêts à exécuter par le processeur avec moins de temps.