Saltar al contenido

¿Cuál es la diferencia entre las funciones de la familia exec de llamadas al sistema como exec y execve?

Esta división ha sido probado por especialistas para asegurar la veracidad de nuestra esta reseña.

Solución:

No hay exec llamada al sistema – esto se usa generalmente para referirse a todos los execXX llamadas en grupo. Todos hacen esencialmente lo mismo: cargar un nuevo programa en el proceso actual y proporcionarle argumentos y variables de entorno. Las diferencias están en cómo se encuentra el programa, cómo se especifican los argumentos y de dónde proviene el entorno.

  • Las llamadas con v en el nombre tomar un array parámetro para especificar el argv[] array del nuevo programa. El final de los argumentos se indica mediante un array elemento que contiene NULL.

  • Las llamadas con l en el nombre toma los argumentos del nuevo programa como una lista de argumentos de longitud variable para la función misma. El final de los argumentos se indica mediante un (char *)NULL argumento. Siempre debes incluir el tipo cast, porque NULL se permite que sea una constante entera, y las conversiones de argumentos predeterminadas al llamar a una función variable no la convertirán en un puntero.

  • Las llamadas con e en el nombre tome un argumento adicional (o argumentos en el l caso) para proporcionar el entorno del nuevo programa; de lo contrario, el programa hereda el entorno del proceso actual. Esto se proporciona de la misma manera que el argv array: un array por execve()argumentos separados para execle().

  • Las llamadas con p en el nombre busque el PATH variable de entorno para encontrar el programa si no tiene un directorio (es decir, no contiene un / personaje). De lo contrario, el nombre del programa siempre se trata como una ruta al ejecutable.

  • FreeBSD 5.2 agregó otra variante: execvP (con mayúsculas P). Esto es como execvp()pero en lugar de obtener la ruta de búsqueda del PATH variable de entorno, es un parámetro explícito de la función:

int execvP(const char *file, const char *search_path, char *const argv[]);

Usar man exec y leer:

The execv(), execvp(), and execvpe() functions provide an array of pointers to 
null-terminated strings that represent the argument list available to the new program. 
The first argument, by convention, should point to the filename associated with the file 
being executed. The array of pointers must be terminated by a NULL pointer. 

execv

int execv(const char *path, char *const argv[]);

Entonces pasas un array como parámetros

int execle(const char *path, const char *arg,
              ..., char * const envp[]);

Casi lo mismo, pero no como un arraysino más bien como una lista de valores (cadenas), seguida de un array el designa el entorno.

Aquí:

int execvp(const char *file, char *const argv[]);

Está llamando a un archivo, sin ruta, por lo que espera que ya esté en la derecha path antes de llamar

Por último, pero no menos importante:

int execve(const char *filename, char *const argv[],
                  char *const envp[]);

Similar al anterior, pero ahora tiene dos matrices, para argumentos y variables de entorno.

Dado que todas estas funciones pertenecen a la familia exec(), permítanme differentiate de acuerdo a extra characters con los significados,

1.execve():

p : no presente => el nombre del programa a ejecutar se tomará de pathname

v : presente => el argumento se pasará como array

e : presente => el entorno se tomará de envp argument

2.execle():

p : no presente => el nombre del programa a ejecutar se tomará de pathname

l : presente => el argumento se pasará como list

e : presente => el entorno se tomará de envp argument

3.execlp():

p : presente => el nombre del programa a ejecutar se tomará de filename especificado o el sistema search for program file en PATH variable.

l : presente => el argumento se pasará como list

e : no presente => el entorno se tomará de caller's environ

4.execvicepresidente():

p : presente => el nombre del programa a ejecutar se tomará de filename especificado o el sistema search for program file en PATH variable.

v : presente => el argumento se pasará como array

e : no presente => el entorno se tomará de caller's environ

5.execv():

p : no presente => el nombre del programa a ejecutar se tomará de pathname

v : presente => el argumento se pasará como array

e : no presente => el entorno se tomará de caller's environ

6.execyo():

p : no presente => el nombre del programa a ejecutar se tomará de pathname

l : presente => el argumento se pasará como list

e : no presente => el entorno se tomará de caller's environ

Reseñas y calificaciones

Nos puedes patrocinar nuestra función exponiendo un comentario o puntuándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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