EXECVE
Section: System Calls (2)
Updated: August 1, 1992
Index
Return to Main Contents
NAME
execve, execv - execute a file
SYNOPSIS
int execve(const char*path, char *const argv[], char *const
envp);
int execv(const char*path, char *const argv[]);
extern char **environ;
DESCRIPTION
The
execve
and
execv
functions transform the calling process into a new process.
The new process is constructed from an ordinary file
called the new process file.
This file is either an executable object file,
or a file of data for an interpreter.
An executable object file consists
of an identifying header,
followed by pages of data representing
the initial program (text) and initialized data pages.
Additional pages may be specified
by the header to be initialized with zero data.
See
a.out(5).
An interpreter file begins with
a line of the form ``#! interpreter''.
When an interpreter file is
exec'd,
the system runs the specified
interpreter,giving
it the name of the originally
exec'dfileasanargumentand
shifting over the rest of the original arguments.
There can be no return from a successful
or
execv,
since the calling core image is lost.
This is the mechanism whereby
different process images become active.
The argument
argv
is a null-terminated array
of character pointers
to null-terminated character strings.
These strings constitute the argument list
to be made available to the new process.
By convention, at least one argument
must be present in this array,
and the first element of this array should be
the name of the executed program
(that is, the last component of
path).
The
execve
function takes an additional argument
envp
which is a
null-terminated array of character pointers to null-terminated strings. These
strings pass information to the new process that is not directly an argument
to the command (see
environ(7)).
Descriptors open in the calling process remain open in
the new process, except for those for which the close-on-exec
flag is set (see
fcntl(2)).
Descriptors that remain open are unaffected by
execve
or
execv.
Directory streams open in the calling process image are closed in the new
process image.
Ignored signals remain ignored across an
execve
or
execv,
but signals that are caught are reset to their default values.
Blocked signals remain blocked regardless of changes to the signal action.
The signal stack is reset to be undefined (see
sigvec(2)
for more information).
Each process has real user and group IDs and effective user and group IDs. The
real ID identifies the person using the system; the effective ID determines his
access privileges.
The
execve
and
execv
functions change the effective user and group ID to
the owner of the executed file if the file has the ``set-user-ID''
or ``set-group-ID'' modes. The real user ID is not affected. The
effective user ID and effective group ID of the new process image will be
saved (as the saved set-user-ID and the saved set-group-ID) for use by the
setuid(2)function.
The new process also inherits the following attributes from
the calling process:
-
process ID see getpid(2)
parent process ID see getppid(2)
process group ID see getpgrp(2)
session membership see setsid(2)
real user ID see getuid(2)
real group ID see getgid(2)
supplementary group IDs see getgroups(2)
time left until an alarm clock signalsee getitimer(2)
current working directory see getwd(3) or getcwd(3P)
root directory see chroot(2)
file mode mask see umask(2)
signal mask see sigprocmask(2)
pending signals see sigpending(2)
tms_utime, tms_stime, tms_cutime, tms_cstimesee times(2)
controlling terminal see tty(4)
resource usages see getrusage(2)
resource limits see getrlimit(2)
When the executed program begins, it is called as follows:
main(int argc, char *argv);
where
argc
is the number of elements in
argv
(the ``arg count'')
and
argv
is the array of character pointers
to the arguments themselves.
Envp
is a pointer to an array of strings that constitute
the
environment
of the process.
A pointer to this array is also stored in the global variable ``environ''.
Each string consists of a name, an ``='', and a null-terminated value.
The array of pointers is terminated by a null pointer.
The shell
sh(1)
passes an environment entry for each global shell variable
defined when the program is called.
See
environ(7)
for some conventionally
used names.
RETURN VALUE
If
execve
or
execv
returns to the calling process an error has occurred; the
return value will be -1 and the global variable
errno
will contain an error code.
ERRORS
The
execve
and
execv
functions will fail and return to the calling process if one or more
of the following are true:
- [ENOTDIR]
-
A component of the path prefix is not a directory.
- [EINVAL]
-
The pathname contains a character with the high-order bit set.
- [ENAMETOOLONG]
-
A component of
path
exceeds 255 characters,
or the entire pathname exceeds 1023 characters.
For POSIX applications these values are given
by the constants {NAME_MAX} and {PATH_MAX}, respectively.
- [ENOENT]
-
The new process file does not exist or
path
points to an empty string.
- [ELOOP]
-
Too many symbolic links were encountered in translating the pathname.
- [EACCES]
-
Search permission is denied for a component of the path prefix.
- [EACCES]
-
The new process file is not an ordinary file.
- [EACCES]
-
The new process file mode denies execute permission.
- [ENOEXEC]
-
The new process file has the appropriate access
permission, but has an invalid magic number in its header.
- [ETXTBSY]
-
The new process file is a pure procedure (shared text)
file that is currently open for writing or reading by some process.
- [E2BIG]
-
The number of bytes in the new process's argument list
is larger than the system-imposed limit.
The limit in the system as released is 20480 bytes
(NCARGS in
<sys/param.h>.
- [EFAULT]
-
The new process file is not as long as indicated by
the size values in its header.
- [EFAULT]
-
path,
argv,
or
envp
point
to an illegal address.
- [EIO]
-
An I/O error occurred while reading from the file system.
CAVEATS
If a program is
setuid
to a non-super-user, but is executed when
the real uid is ``root'', then the program has some of the powers
of a super-user as well.
SEE ALSO
exit(2), fork(2), execl(3P), environ(7)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- RETURN VALUE
-
- ERRORS
-
- CAVEATS
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 00:59:13 GMT, September 26, 2024