Programación en C

Llamada al sistema ejecutivo en C

Llamada al sistema ejecutivo en C
La familia ejecutiva tiene muchas funciones en C. Estas funciones de C se utilizan básicamente para ejecutar un comando del sistema en un proceso separado que el programa principal e imprime la salida.

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:

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 ():

#incluir
 
int 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:

#incluir
 
int 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:

#incluir
 
int 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:

#incluir
 
int 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 ():

#incluir
 
int 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:

#incluir
 
int 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.

Cómo impulsar FPS en Linux?
FPS significa Cuadros por segundo. La tarea de FPS es medir la velocidad de fotogramas en reproducciones de video o actuaciones de juegos. En palabras...
Los mejores juegos de Oculus App Lab
Si es propietario de un visor Oculus, debe estar informado sobre la descarga lateral. Sideloading es el proceso de instalación de contenido que no es ...
Los 10 mejores juegos para jugar en Ubuntu
La plataforma Windows ha sido una de las plataformas dominantes para juegos debido al gran porcentaje de juegos que se están desarrollando hoy para ad...