EXECVE(2)

NOMBRE
execve - ejecuta un programa

SINOPSIS
#include <unistd.h>

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

DESCRIPCIÓN
execve() ejecuta el programa indicado por filename. filename debe ser un binario ejecutable, o un manuscrito shell (shell script) comenzando con una línea de la forma "#! interprete [arg]". execve() no regresa en caso de éxito, y el texto, dato, bss, y la pila del proceso invocador se reescriben con los análogos del programa cargado. El programa invocado hereda el PID del proceso invocador, y cualquier descriptor de fichero abierto que no halla sido asignado para cerrar en exec. Las señales pendientes del proceso ascendiente se limpian. Si el programa presente está bajo inspección de ptrace, se le enviará una señal SIGTRAP trás la ejecución exitosa de execve().

VALOR REGRESADO
En caso de éxito execve() no regresa mientras que en caso de error el valor regresado es -1, y la variable errno se asigna apropiadamente.

ERRORES

EACCES
    El fichero no es un fichero regular.

EACCES
    Permiso de ejecución le ha sido denegada al fichero.

EPERM
    El sistema de ficheros está montado noexec.

EPERM
    El sistema de ficheros está montado nosuid y el fichero tiene un SUID o SGID bit asignado.

E2BIG
    La lista de argumentos es demasiado grande.

ENOEXEC
    El número mágico en el fichero es incorrecto.

EFAULT
    filename indica fuera de su espacio de direcciones accesible.

ENAMETOOLONG
    filename es demasiado largo.

ENOENT
    El fichero no existe.

ENOMEM
    No hay suficiente memoria disponible en el kernel.

ENOTDIR
    Un componente del camino (path) no es un directorio.

EACCES
    Permiso de búsqueda ha sido denegado en uno de los componentes del camino.

ELOOP
    filename contiene una referencia circular (p.e. via ligadura simbólica)

CONFORMA CON
SVID, AT&T, POSIX, X/OPEN, BSD 4.3

NOTAS
Procesos SUID y SGID no pueden ser inspeccionados con ptrace() SUID ó SGID. La longitud máxima de línea en un ejecutable del tipo #! es de 127 caracteres en la primera línea del fichero. Una forma de circunvenir esto es cambiando el tamaño máximo del acumulador (buffer), en cuyo caso se quedará limitado al tamaño de 1024 byte de un acumulador, y esto no es algo que se pueda evitar fácilmente.

VÉASE
execl(3), fork(2)