Cómo usar execl (ejemplo incluido)

Cómo usar execl (ejemplo incluido)

execl es una de las familias de llamadas exec que actúan como interfaz para el execve. La siguiente captura de pantalla se refiere a man execl:

Los argumentos para estas siete funciones ejecutivas son difíciles de recordar. Las letras en los nombres de las funciones ayudan un poco. La letra p significa que la función toma un argumento de nombre de archivo y usa la variable de entorno PATH para encontrar el archivo ejecutable. La letra l significa que la función toma una lista de argumentos y es mutuamente excluyente con la letra v, lo que significa que toma un vector argv[]. Finalmente, la letra e significa que la función toma una matriz envp[] en lugar de usar el entorno actual.

En la publicación “Usando execve” vimos cómo se puede usar para iniciar un nuevo proceso y también pasarle argumentos. execl también lanza un nuevo proceso que reemplaza al actual. La sintaxis de execl es:

int execl(const char *path, const char *arg, ...);

Argumentos :
camino :Ruta al ejecutable que necesita ser ejecutado por execl.
arg… :Serie de punteros a los argumentos que deben pasarse al ejecutable.

En execve, teníamos que pasar una serie de punteros como argumentos, pero en execl podemos pasar directamente los punteros como argumentos. Estos argumentos deben terminar en NULL.

Ejemplo

1. Escribamos un programa simple para imprimir los argumentos que se le pasan.

# vi hello.c
#include <stdio.h>
main(int argc,char *argv[],char *envp[]){

printf("Filename: %s\n",argv[0]);
printf("%s %s\n",argv[1],argv[2]);
}

2. Por convención, el primer argumento siempre debe ser el nombre del archivo y seguiremos el mismo. Vamos a compilar esto y nombrar el ejecutable "hola"

# cc hello.c -o hello

3. Ahora escribamos un programa para ejecutar el ejecutable "hola" usando execl.

# vi execl.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

main() {
char *temp,*temp1,*temp2;
temp="hello";  //filename
temp1="Funny"; 
temp2="world";

execl("hello",temp,temp1,temp2,NULL);
printf("Error");
}

4. Compile el código y ejecútelo:

# cc execl.c -o execl
./execl 

Salida:

Filename: hello
Funny world

Por lo tanto, el programa podría ejecutar con éxito el ejecutable "hola" y también pasarle los argumentos. Además, tenga en cuenta que execl no volvió a la función de llamada, de lo contrario, habría impreso la declaración de "Error" después de la llamada a execl.