execl, execlp, execle, exect, execv, execvp, execvP - exe
cute a file


Standard C Library (libc, -lc)


#include <unistd.h>
extern char **environ;
execl(const char *path, const char *arg, ..., /*, (char *)0,
execlp(const char *file, const char  *arg,  ...,  /*,  (char
*)0, */);
execle(const char *path, const char *arg, ...,
        /*, (char *)0, char *const envp[], */);
exect(const  char  *path,  char  *const  argv[], char *const
execv(const char *path, char *const argv[]);
execvp(const char *file, char *const argv[]);
execvP(const  char  *file,  const  char  *search_path,  char
*const argv[]);


The exec family of functions replaces the current process
image with a
new process image. The functions described in this manual
page are
front-ends for the function execve(2). (See the manual page
execve(2) for detailed information about the replacement of
the current
The initial argument for these functions is the pathname of
a file which
is to be executed.
The const char *arg and subsequent ellipses in the execl(),
execlp(), and
execle() functions can be thought of as arg0, arg1, ...,
argn. Together
they describe a list of one or more pointers to null-termi
nated strings
that represent the argument list available to the executed
program. The
first argument, by convention, should point to the file name
with the file being executed. The list of arguments must be
by a NULL pointer.
The exect(), execv(), execvp(), and execvP() functions pro
vide an array
of pointers to null-terminated strings that represent the
argument list
available to the new program. The first argument, by con
vention, should
point to the file name associated with the file being exe
cuted. The
array of pointers must be terminated by a NULL pointer.
The execle() and exect() functions also specify the environ
ment of the
executed process by following the NULL pointer that termi
nates the list
of arguments in the argument list or the pointer to the argv
array with
an additional argument. This additional argument is an ar
ray of pointers
to null-terminated strings and must be terminated by a NULL
pointer. The
other functions take the environment for the new process im
age from the
external variable environ in the current process.
Some of these functions have special semantics.
The functions execlp(), execvp(), and execvP() will dupli
cate the actions
of the shell in searching for an executable file if the
specified file
name does not contain a slash ``/'' character. For execlp()
execvp(), search path is the path specified in the environ
ment by
``PATH'' variable. If this variable is not specified, the
default path
is set according to the _PATH_DEFPATH definition in which is
set to
``/usr/bin:/bin''. For execvP(), the search path is speci
fied as an
argument to the function. In addition, certain errors are
treated specially.
If an error is ambiguous (for simplicity, we shall consider
all errors
except ENOEXEC as being ambiguous here, although only the
critical error
EACCES is really ambiguous), then these functions will act
as if they
stat the file to determine whether the file exists and has
suitable execute permissions. If it does, they will return immediately
with the
global variable errno restored to the value set by execve().
the search will be continued. If the search completes with
out performing
a successful execve() or terminating due to an error, these
will return with the global variable errno set to EACCES or
according to whether at least one file with suitable execute
was found.
If the header of a file is not recognized (the attempted
returned ENOEXEC), these functions will execute the shell
with the path
of the file as its first argument. (If this attempt fails,
no further
searching is done.)
The function exect() executes a file with the program trac
ing facilities
enabled (see ptrace(2)).


If any of the exec() functions returns, an error will have
occurred. The
return value is -1, and the global variable errno will be
set to indicate
the error.


/bin/sh The shell.


Historically, the default path for the execlp() and execvp()
was ``:/bin:/usr/bin''. This was changed to place the cur
rent directory
last to enhance system security.
The behavior of execlp() and execvp() when errors occur
while attempting
to execute the file is not quite historic practice, and has
not traditionally been documented and is not specified by the POSIX
Traditionally, the functions execlp() and execvp() ignored
all errors
except for the ones described above and ETXTBSY, upon which
they retried
after sleeping for several seconds, and ENOMEM and E2BIG,
upon which they
returned. They now return for ETXTBSY, and determine exis
tence and executability more carefully. In particular, EACCES for inac
cessible directories in the path prefix is no longer confused with EACCES
for files
with unsuitable execute permissions. In 4.4BSD, they re
turned upon all
errors except EACCES, ENOENT, ENOEXEC and ETXTBSY. This was
inferior to
the traditional error handling, since it breaks the ignoring
of errors
for path prefixes and only improves the handling of the un
usual ambiguous
error EFAULT and the unusual error EIO. The behaviour was
changed to
match the behaviour of sh(1).


The execl(), execle(), execlp(), execvp() and execvP() func
tions may fail
and set errno for any of the errors specified for the li
brary functions
execve(2) and malloc(3).
The exect() and execv() functions may fail and set errno for
any of the
errors specified for the library function execve(2).


sh(1), execve(2), fork(2), ktrace(2), ptrace(2), environ(7)


The execl(), execv(), execle(), execlp() and execvp() func
tions conform
to IEEE Std 1003.1-1988 (``POSIX.1''). The execvP() func
tion first
appeared in FreeBSD 5.2.
BSD January 24, 1994
Copyright © 2010-2024 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout