En este artículo, voy a hablar sobre la familia de funciones ejecutivas y le mostraré cómo usar cada una de estas funciones de la familia ejecutiva en C. Entonces empecemos.
Funciones del sistema C en la familia Exec:
Las familias de funciones ejecutivas se definen en el encabezado unistd.h. Por lo tanto, debe usar este encabezado en el programa C donde desea usar estas funciones.
Las funciones ejecutivas disponibles junto con sus parámetros de función se dan a continuación:
- int execl (const char * ruta, const char * arg,…, NULL);
- int execlp (const char * archivo, const char * arg,…, NULL);
- int execv (const char * ruta, char * const argv []);
- int execvp (const char * archivo, char * const argv []);
- int execle (const char * ruta, const char * arg,…, NULL, char * const envp []);
- int execve (const char * archivo, char * const argv [], char * const envp []);
Veamos qué hace cada una de estas funciones y cómo usarlas.
execl () Función del sistema:
En execl (), la función del sistema toma la ruta del archivo binario ejecutable (i.mi. / bin / ls) como primer y segundo argumento. Entonces, los argumentos (i.mi. -lh, /casa) que desea pasar al ejecutable seguido de NULO. Luego, la función del sistema execl () ejecuta el comando e imprime la salida. Si ocurre algún error, execl () devuelve -1. De lo contrario, no devuelve nada.
Sintaxis:
int execl (const char * ruta, const char * arg,…, NULL);A continuación se muestra un ejemplo de la función del sistema execl ():
#incluirint main (void)
char * binaryPath = "/ bin / ls";
char * arg1 = "-lh";
char * arg2 = "/ inicio";
execl (ruta binaria, ruta binaria, arg1, arg2, NULL);
return 0;
Corrí el ls -lh / inicio comando usando la función del sistema execl (). Como puede ver, se muestra el resultado correcto.
execlp () Función del sistema:
execl () no usa el CAMINO Variable ambiental. Por lo tanto, se requiere la ruta completa del archivo ejecutable para ejecutarlo con execl (). execlp () usa la variable de entorno PATH. Entonces, si un archivo o comando ejecutable está disponible en la RUTA, entonces el comando o el nombre del archivo es suficiente para ejecutarlo, la ruta completa no es necesaria.
Sintaxis:
int execlp (const char * archivo, const char * arg,…, NULL);Podemos reescribir el ejemplo execl () usando la función del sistema execlp () de la siguiente manera:
#incluirint main (void)
char * programName = "ls";
char * arg1 = "-lh";
char * arg2 = "/ inicio";
execlp (nombre del programa, nombre del programa, arg1, arg2, NULL);
return 0;
Solo pasé el nombre del comando ls, no el camino completo / bin / ls. Como puede ver, obtuve el mismo resultado que antes.
execv () Función del sistema:
En la función execl (), los parámetros del archivo ejecutable se pasan a la función como diferentes argumentos. Con execv (), puede pasar todos los parámetros en una matriz terminada en NULL argv. El primer elemento de la matriz debe ser la ruta del archivo ejecutable. De lo contrario, la función execv () funciona igual que la función execl ().
Sintaxis:
int execv (const char * ruta, char * const argv []);Podemos reescribir el ejemplo execl () de la siguiente manera:
#incluirint main (void)
char * binaryPath = "/ bin / ls";
char * args [] = binaryPath, "-lh", "/ home", NULL;
execv (ruta binaria, argumentos);
return 0;
Como puede ver, obtengo la salida correcta.
execvp () Función del sistema:
Funciona de la misma manera que la función del sistema execv (). Pero, se usa la variable de entorno PATH. Por lo tanto, la ruta completa del archivo ejecutable no es necesaria como en execlp ().
Sintaxis:
int execvp (const char * archivo, char * const argv []);Podemos reescribir el ejemplo execv () de la siguiente manera:
#incluirint main (void)
char * programName = "ls";
char * args [] = programName, "-lh", "/ home", NULL;
execvp (nombre del programa, argumentos);
return 0;
Como puede ver, se muestra la salida correcta.
execle () Función del sistema:
Funciona igual que execl () pero puede proporcionar sus propias variables de entorno junto con él. Las variables de entorno se pasan como una matriz envp. El último elemento de la envp la matriz debe ser NULL. Todos los demás elementos contienen los pares clave-valor como cadena.
Sintaxis:
int execle (const char * ruta, const char * arg,…, NULL, char * const envp []);A continuación se muestra un ejemplo de la función del sistema execle ():
#incluirint main (void)
char * binaryPath = "/ bin / bash";
char * arg1 = "-c";
char * arg2 = "echo" Visita $ HOSTNAME: $ PORT desde tu navegador."";
char * const env [] = "HOSTNAME = www.linuxhint.com "," PUERTO = 8080 ", NULL;
execle (ruta binaria, ruta binaria, arg1, arg2, NULL, env);
return 0;
Pasé dos variables de entorno NOMBRE DE ANFITRIÓN y PUERTO a la función execle (). Como puede ver, puedo acceder a ellos desde el ejecutable / bin / bash.
execve () Función del sistema:
Al igual que execle (), puede proporcionar sus propias variables de entorno junto con execve (). También puede pasar argumentos como matrices como lo hizo en execv ().
Sintaxis:
int execve (const char * archivo, char * const argv [], char * const envp []);El ejemplo execle () se puede reescribir de la siguiente manera:
#incluirint main (void)
char * binaryPath = "/ bin / bash";
char * const args [] = binaryPath, "-c", "echo" Visita $ HOSTNAME: $ PORT
desde tu navegador."", NULO;
char * const env [] = "HOSTNAME = www.linuxhint.com "," PUERTO = 8080 ", NULL;
execve (binaryPath, args, env);
return 0;
Como puede ver, obtenemos el mismo resultado que en el ejemplo execle ().
Entonces, así es como se usa la familia de funciones ejecutivas en C para la programación del sistema en Linux. Gracias por leer este artículo.