Funzione Execvp in c

Funzione Execvp in c

La funzione Execvp () appartiene alla famiglia Exec. Nell'argomento di oggi, discuteremo le caratteristiche e l'applicazione della funzione ExecVP () sotto la famiglia Exec.

La funzione della famiglia Exec in C lingua ci aiuta a eseguire altri programmi all'interno del nostro programma. Per fare questo dall'interno del mio programma utilizziamo una serie di funzioni chiamata Famiglia Exec Family of Function e questi sono nel programma Linux.

Applicazione della funzione Execvp ()

Se vogliamo eseguire un ping del programma, possiamo applicarlo tramite EXECVP (). Per questo, dobbiamo usare l'array. La funzione di lettera "V" utilizzata per Execvp () sta per Vector.

Sintassi

La sintassi per Execvp ():

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

Qui, il primo parametro è un puntatore del file che punta un file che deve essere eseguito nel programma.

Il secondo parametro è una costante di punta.

Esempio di programmazione 1

Qui, vedremo come funziona effettivamente nel nostro programma.

#includere
#includere
#includere
#include // incluso questo file per la piattaforma Linux
int main (int argc, char *argv [])

char *ar [10] = "ping", "Google.com ","-c10 ", null; // Dichiarazione e inizializzazione di un array
Execvp ("ping", AR);
printf ("Non ottiene alcuna risposta poiché la funzione Execvp () esegue prima \ n"
// Questa istruzione non viene eseguita perché ExeCVP () prende il controllo sul programma se ExeCVP ha restituito il successo.
restituzione 0;

Produzione

Spiegazione
In questo esempio di programmazione, se vogliamo eseguire il ping di "Google.com "Con l'aiuto di Execvp () nella piattaforma Linux, dobbiamo includere un file di intestazione chiamato UNISTD.H nel nostro programma.

Per eseguire la funzione Execvp (), dobbiamo dichiarare un array (effettivamente array di stringa) denominato AR [] e inizializzare alcuni valori come "ping" ", Google.com "e null.

Ora, se proveremo a passare la matrice di argomenti all'interno della funzione tra parentesi di Execvp (), noteremo che sta facendo il ping di Google.com come output.

Esempio di programmazione 2

Qui mostriamo un'altra applicazione della funzione Execvp ().

#include // incluso questo file per la piattaforma Linux
#includere
#includere
#includere
int main ()

char *cmd = "cd";
char *arr_ls [] = "cd", "/root/Nothing", null; // Dichiarazione e inizializzazione di un array
errno = 0;
int id = execvp (cmd, arr_ls);
if (id == -1)

printf ("\ nhere è il numero di errore restituito da Execvp:%d \ n", errno);
if (errno == 2)
printf ("!!Nessun file o directory con questo nome!!\N");
altro
Perror ("ExecVP");

printf ("Se Execvp restituisce il successo, non vedremo questa linea, vedremo questa riga. \N " ) ;
restituzione 0;

Produzione

Spiegazione
In questo esempio di programmazione, vedremo se la funzione Execvp () restituirà un valore falso. Se la funzione Execvp () restituisce un valore falso, quindi ha stampato il valore di "errorno " che è 2 e stampare il messaggio che "Nessun file o directory con questo nome".

Se la funzione Execvp () restituisce il valore reale, qualsiasi istruzione dopo ExeCVP non verrà eseguita. Come sappiamo dalle caratteristiche della funzione ExecVP (), nessuna riga viene eseguita quando Execvp () la funzione prende il controllo del programma.

Esempio di programmazione 3

In questo esempio di programmazione, vedremo l'importante applicazione della funzione Execvp () relativa al fork () o al processo.

#includere
#includere
int main ()

char *cmd = "ls";
char *arg_ls [] = "ls", "-l", null;
printf ("Esempio dell'esecuzione di un'istruzione prima di Execvp () invocata \ n");
printf ("Stiamo introducendo un altro processo che indica una forcella \ n");
if (fork () == 0) // viene introdotto il processo figlio che è controllato da "LS-L"

int sts_cd = execvp (cmd, arg_ls);
printf ("Questa istruzione esegue ciò significa che esiste un problema che esegue il comando \ n");
if (sts_cd == -1)

printf ("Errore ExecVP! \N" ) ;
Ritorno 1;


Else // Programma principale eseguito qui

printf ("questa affermazione esegue ciò che risale al programma principale \ n");

restituzione 0;

Produzione

Spiegazione
Come tutte le funzioni della famiglia Exec in C, ExecVP () può eseguire altri programmi all'interno del nostro programma.

In questo esempio di programmazione, dichiariamo un array di caratteri o un nome di stringa arg_ls []. All'interno di questa stringa, inizializziamo alcuni valori e anche null. Quindi, chiamiamo un altro processo chiamato FORK ().

Qui, la funzione Execvp () restituisce il vero valore. Quindi, la funzione fork () può eseguire correttamente la sua azione. In caso contrario, andrà al programma principale.

Esempio di programmazione 4

Qui vedremo un'altra funzione della funzione Execvp ().

#includere
#includere
int main ()

char *cmd = "cd";
char *arg_ls [] = "cd", "/root/bam", null;
printf ("Esempio dell'esecuzione di un'istruzione prima di Execvp () invocata \ n");
printf ("Stiamo introducendo un altro processo che indica una forcella \ n");
if (fork () == 0) // viene introdotto il processo figlio che è controllato da "LS-L"

int sts_cd = execvp (cmd, arg_ls);
printf ("Questa istruzione esegue ciò significa che esiste un problema che esegue il comando \ n");
if (sts_cd == -1)

printf ("Errore ExecVP! \N" ) ;
Ritorno 1;


Else // Programma principale eseguito qui

printf ("questa affermazione esegue ciò che risale al programma principale \ n");

restituzione 0;

Produzione

Spiegazione
L'esempio di programmazione sopra è la versione modificata dell'esempio di programmazione 3. Qui vedremo se la funzione fork () restituirà '0'. Quindi, il processo figlio eseguirà il loro codice ed è controllato da “Ls-“ l comando. Il valore che restituirà Execvp () è assegnato a una variabile denominata sts_cd. Se sts_cd vedremo il valore -1, quindi capiremo che si tratta di un errore della funzione Execvp (). Altrimenti, questa funzione prende il controllo sul resto del programma.

Conclusione

Dalla discussione di cui sopra sull'implementazione di ExeCVP () nella famiglia Exec, siamo giunti alla conclusione che sostituisce un'immagine di processo con una nuova immagine nella nostra RAM (Accesso casuale) per eseguire il nuovo processo. In realtà, questa funzione aiuta il nostro sistema operativo a gestire tutti i processi pronti ad eseguire dal processore con meno tempo.