exec familia de funciones en C

La familia de funciones exec reemplaza el proceso en ejecución actual con un nuevo proceso. Se puede usar para ejecutar un programa C usando otro programa C. Viene bajo el archivo de encabezado unistd.h. Hay muchos miembros en la familia ejecutiva que se muestran a continuación con ejemplos. 

  • execvp : con este comando, el proceso secundario creado no tiene que ejecutar el mismo programa que el proceso principal. Las llamadas al sistema de tipo exec permiten que un proceso ejecute cualquier archivo de programa, que incluye un ejecutable binario o un script de shell. 

Sintaxis: 

int execvp (const char *file, char *const argv[]);
  • archivo:  apunta al nombre del archivo asociado con el archivo que se está ejecutando. 
    argv:  es una array terminada en nulo de punteros de caracteres.
    Veamos un pequeño ejemplo para mostrar cómo usar la función execvp() en C. Tendremos dos archivos .C, EXEC.c y execDemo.c y reemplazaremos execDemo.c con EXEC.c llamando a execvp() función en execDemo.c .

CPP

//EXEC.c
 
#include<stdio.h>
#include<unistd.h>
 
int main()
{
    int i;
     
    printf("I am EXEC.c called by execvp() ");
    printf("\n");
     
    return 0;
}
  • Ahora, cree un archivo ejecutable de EXEC.c usando el comando 
gcc EXEC.c -o EXEC

CPP

//execDemo.c
 
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
        //A null terminated array of character
        //pointers
        char *args[]={"./EXEC",NULL};
        execvp(args[0],args);
     
        /*All statements are ignored after execvp() call as this whole
        process(execDemo.c) is replaced by another process (EXEC.c)
        */
        printf("Ending-----");
     
    return 0;
}
  • Ahora, cree un archivo ejecutable de execDemo.c usando el comando 
gcc execDemo.c -o execDemo
  • Después de ejecutar el archivo ejecutable de execDemo.cby usando el comando ./excDemo, obtenemos el siguiente resultado: 
I AM EXEC.c called by execvp()
  • Cuando se compila el archivo execDemo.c, tan pronto como se ejecuta la sentencia execvp(args[0],args), este mismo programa es reemplazado por el programa EXEC.c. “Ending—–” no se imprime porque tan pronto como se llama a la función execvp(), este programa es reemplazado por el programa EXEC.c.
  • execv : Esto también es muy similar a la función execvp() en términos de sintaxis. La sintaxis de execv() es como se muestra a continuación:

Sintaxis: 

int execv(const char *path, char *const argv[]);
  • ruta: debe apuntar a la ruta del archivo que se está ejecutando. 
    argv[]: es una array de punteros de caracteres terminada en nulo.
    Veamos un pequeño ejemplo para mostrar cómo usar la función execv() en C. Este ejemplo es similar al ejemplo que se muestra arriba para execvp() . Tendremos dos archivos .C, EXEC.c y execDemo.c y reemplazaremos execDemo.c con EXEC.c llamando a la función execv() en execDemo.c.
     

CPP

//EXEC.c
 
#include<stdio.h>
#include<unistd.h>
 
int main()
{
    int i;
     
    printf("I am EXEC.c called by execv() ");
    printf("\n");
    return 0;
}
  • Ahora, cree un archivo ejecutable de EXEC.c usando el comando 
gcc EXEC.c -o EXEC

CPP

//execDemo.c
 
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{
        //A null terminated array of character
        //pointers
        char *args[]={"./EXEC",NULL};
        execv(args[0],args);
     
        /*All statements are ignored after execvp() call as this whole
        process(execDemo.c) is replaced by another process (EXEC.c)
        */
        printf("Ending-----");
     
    return 0;
}
  • Ahora, cree un archivo ejecutable de execDemo.c usando el comando 
gcc execDemo.c -o execDemo
  • Después de ejecutar el archivo ejecutable de execDemo.c usando el comando ./excDemo, obtenemos el siguiente resultado: 
I AM EXEC.c called by execv()
  • execlp y execl : estos dos también tienen el mismo propósito, pero la sintaxis de ellos es un poco diferente, como se muestra a continuación:

Sintaxis: 

int execlp(const char *file, const char *arg,.../* (char  *) NULL */);
int execl(const char *path, const char *arg,.../* (char  *) NULL */);
  • archivo:  nombre de archivo asociado con el archivo que se está ejecutando 
    const char *arg y puntos suspensivos : describen una lista de uno o más punteros a strings terminadas en nulo que representan la lista de argumentos disponibles para el programa ejecutado.
    Los mismos programas en C que se muestran arriba se pueden ejecutar con las funciones execlp() o execl() y realizarán la misma tarea, es decir, reemplazarán el proceso actual con un proceso nuevo.
  • execvpe y exec : estos dos también tienen el mismo propósito, pero su sintaxis es un poco diferente de todos los miembros anteriores de la familia exec. Las sintaxis de ambos se muestran a continuación: 
    Sintaxis: 
int execvpe(const char *file, char *const argv[],char *const envp[]);

Syntax:
int execle(const char *path, const char *arg, .../*, (char *) NULL, 
char * const envp[] */);
  • La sintaxis que se muestra arriba tiene un argumento diferente de todos los miembros exec anteriores, es decir, 
    char * const envp[]:  permite que la persona que llama especifique el entorno del programa ejecutado a través del argumento envp. 
    envp: este argumento es una array de punteros a strings terminadas en nulo y debe terminar con un puntero nulo. Las otras funciones toman el entorno para la nueva imagen del proceso del entorno de la variable externa en el proceso de llamada.

Referencia: página del manual exec(3)
Este artículo es una contribución de MAZHAR IMAM KHAN . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *