Conceptos básicos sobre el uso de la familia de funciones de Linux exec

  

Comandos de shell shell: execlp (" sh ", " sh ", " filename ", (char *) 0);




exec reemplaza completamente la imagen del programa que lo llamó con el programa ejecutado. Fork crea un nuevo proceso y genera un nuevo PID. Exec inicia un nuevo programa y reemplaza el proceso original. Por lo tanto, el PID del nuevo proceso ejecutado por exec no cambiará, al igual que el proceso de llamar a exec.

int exec … Carga y ejecuta otros programas: int execl (char * pathname, char * arg0, char * arg1, ..., char * argn, NULL) int execle (char * pathname, char * Arg0, char * arg1, ..., char * argn, NULL, char * envp []) int execlp (char * pathname, char * arg0, char * arg1, ..., NULL) int execlpe (char * pathname, Char * arg0, char * arg1, ..., NULL, char * envp []) int execv (char * nombre de ruta, char * argv []) int execve (char * nombre de ruta, char * argv [], char * envp [ ,null,null,3],]) int execvp (char * pathname, char * argv []) int execvpe (char * pathname, char * argv [], char * envp []) La familia de funciones exec carga y ejecuta el programa pathname y establece el argumento arg0 (arg1 , arg2, argv [], envp []) pasado a la subrutina, el error devuelve -1 en la familia de funciones exec, el sufijo l, v, p, e se agrega a la exec, la función especificada tendrá alguna capacidad operativa Cuando el sufijo es p, la función puede usar la variable PATH de DOS para encontrar el archivo de subrutina. Si desea ejecutar el comando /bin /cat /etc /passwd /etc /group, desea recibir una lista de argumentos separados por comas, con el puntero NULL como el marcador de final execl (" /bin /cat ", " /Etc /pass ", " /etc /group " NULL); v, desea recibir un puntero a una matriz de cadena terminada en NULL char * argv [] = {{quot /quot /bin /cat ", " Etc /pass ", " /etc /group ", NULL} execv (" /bin /cat ", argv); e, la función pasa el parámetro especificado envp, lo que permite cambiar el entorno del proceso hijo, sin el sufijo e El proceso utiliza el entorno del programa actual. Envp también es un puntero de matriz de cadena terminada en NULL execl (archivo de ejecución) relacionadas con las funciones fork, execle, execcl, execv, execve, execvp header file # include < unistd.h > define la función int execl (const char * path, const Char * arg, ....); Descripción de la función execl () se utiliza para ejecutar la ruta del archivo representada por la cadena de ruta del parámetro. El siguiente parámetro representa el argv pasado (0), argv [1] y hellip cuando se ejecuta el archivo.; …, el último argumento debe terminar con un puntero nulo (NULL). El valor de retorno no se devolverá si la ejecución es exitosa. Si la ejecución falla, devolverá directamente -1. El motivo de la falla se almacena en errno. Ejemplo # incluye < unistd.h > main () {execl (" /bin /ls ", " ls ", " -al ", " /etc /passwd ", (char *) 0); Execute /* Ejecutar /bin /ls -al /etc /passwd * /- rw-r - r-- 1 root root 705 Sep 3 13: 52 /etc /passwd

execlp (de la variable de entorno PATH Busque el archivo y ejecute) las funciones relacionadas fork, execl, execle, execv, execve, execvp header file # include < unistd.h > define function int execlp (const char * file, const char * arg, … …); Explique que execlp () buscará el nombre de archivo que coincida con el archivo de parámetros del directorio al que apunta la variable de entorno PATH. Después de que se encuentre el nombre del archivo, se ejecutará el archivo, y los parámetros segundo y subsiguientes se tratarán como argv [0], argv [1] del archivo. … …, el último argumento debe terminar con un puntero nulo (NULL). Valor de retorno Si la ejecución es exitosa, la función no regresará. Si la ejecución falla, devolverá directamente -1. El motivo de la falla se almacena en errno. El código de error se refiere a execve (). Ejemplo /* Ejecutando ls -al /etc /passwd execlp () encontrará /bin /ls * /# include < unistd.h > main () {execlp (" ls ", " ls &") dependiendo de /bin en la variable PATH;, " -al ", " /etc /passwd ", (char *) 0);} Ejecutar -rw-r - r-- 1 root root 705 Sep 3 13: 52 /etc /passwd

execv (archivo de ejecución) relacionadas con las funciones fork, execl, execle, execcl, execve, execvp header file # include < unistd.h > define función int execv (const char * path, char * const argv []); función El método execv () se utiliza para ejecutar la ruta del archivo representado por la cadena de ruta del parámetro. La diferencia con execl () es que execve () requiere solo dos parámetros, y el segundo parámetro se pasa al archivo ejecutable utilizando el puntero de matriz. Valor de retorno Si la ejecución es exitosa, la función no regresará. Si la ejecución falla, devolverá directamente -1. El motivo de la falla se almacena en errno. Por favor, consulte execve () para el código de error. Ejemplo /* Ejecutar /bin /ls -al /etc /passwd * /# include < unistd.h > main () {char * argv [] = {" ls ", " -al ", " /etc /Passwd ", (char *)}}; execv (" /bin /ls ", argv);} Ejecutar -rw-r - r-- 1 root root 705 Sep 3 13: 52 /etc /passwd

execve (ejecutar archivo) funciones relacionadas fork, execl, execle, execcl, execv, execvp encabezado archivo # include < unistd.h > define función int execve (const char * filename, char * const argv [], char * Const envp []); la descripción de la función execve () se usa para ejecutar la ruta del archivo representada por la cadena de nombre de archivo del parámetro, el segundo parámetro se pasa al archivo ejecutable utilizando el puntero de matriz, argv se pasa a la lista completa de parámetros del programa, incluido [0], que generalmente es el nombre del programa en ejecución, el último parámetro es una matriz de nuevas variables de entorno pasadas al archivo ejecutable. Valor de retorno Si la ejecución es exitosa, la función no regresará. Si la ejecución falla, devolverá directamente -1. El motivo de la falla se almacena en errno. Código de error EACCES1. El archivo a ejecutar no tiene los permisos ejecutables por el usuario. 2. El sistema de archivos al que pertenece el archivo a ejecutar está colgado en modo noexec. 3. El archivo o el traductor de script que se ejecutará no es un archivo general.

Copyright © Conocimiento de Windows All Rights Reserved