119 lines
4.8 KiB
Groff
119 lines
4.8 KiB
Groff
|
||
|
||
EXECL(3) Minix Programmer's Manual EXECL(3)
|
||
|
||
|
||
NAME
|
||
execl, execv, execle, execlp, execvp, exec, environ - execute a file
|
||
|
||
SYNOPSIS
|
||
#include <unistd.h>
|
||
|
||
int execl(const char *name, const char *arg0, ..., (char *) NULL)
|
||
int execv(const char *name, char *const argv[])
|
||
int execle(const char *name, const char *arg0, ..., (char *) NULL, char
|
||
*const envp[])
|
||
int execlp(const char *name, const char *arg0, ..., (char *) NULL)
|
||
int execvp(const char *name, char *const argv[])
|
||
|
||
extern char *const *environ;
|
||
|
||
DESCRIPTION
|
||
These routines provide various interfaces to the execve system call.
|
||
Refer to execve(2) for a description of their properties; only brief
|
||
descriptions are provided here.
|
||
|
||
Exec in all its forms overlays the calling process with the named file,
|
||
then transfers to the entry point of the core image of the file. There
|
||
can be no return from a successful exec; the calling core image is lost.
|
||
|
||
The name argument is a pointer to the name of the file to be executed.
|
||
The pointers arg[0], arg[1] ... address null-terminated strings.
|
||
Conventionally arg[0] is the name of the file.
|
||
|
||
Two interfaces are available. execl is useful when a known file with
|
||
known arguments is being called; the arguments to execl are the character
|
||
strings constituting the file and the arguments; the first argument is
|
||
conventionally the same as the file name (or its last component). A null
|
||
pointer argument must end the argument list. (Note that the execl*
|
||
functions are variable argument functions. This means that the type of
|
||
the arguments beyond arg0 is not checked. So the null pointer requires
|
||
an explicit cast to type (char *) if not of that type already.)
|
||
|
||
The execv version is useful when the number of arguments is unknown in
|
||
advance; the arguments to execv are the name of the file to be executed
|
||
and a vector of strings containing the arguments. The last argument
|
||
string must be followed by a null pointer.
|
||
|
||
When a C program is executed, it is called as follows:
|
||
|
||
int main(int argc, char *const argv[], char *const envp[]);
|
||
|
||
exit(main(argc, argv, envp));
|
||
|
||
|
||
|
||
|
||
|
||
5BSD April 25, 1986 1
|
||
|
||
|
||
|
||
EXECL(3) Minix Programmer's Manual EXECL(3)
|
||
|
||
|
||
where argc is the argument count and argv is an array of character
|
||
pointers to the arguments themselves. As indicated, argc is
|
||
conventionally at least one and the first member of the array points to a
|
||
string containing the name of the file.
|
||
|
||
Argv is directly usable in another execv because argv[argc] is 0.
|
||
|
||
Envp is a pointer to an array of strings that constitute the environment
|
||
of the process. 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. The C run-time start-off routine places a
|
||
copy of envp in the global cell environ, which is used by execv and execl
|
||
to pass the environment to any subprograms executed by the current
|
||
program.
|
||
|
||
Execlp and execvp are called with the same arguments as execl and execv,
|
||
but duplicate the shell's actions in searching for an executable file in
|
||
a list of directories. The directory list is obtained from the
|
||
environment variable PATH. Under standard Minix, if a file is found that
|
||
is executable, but does not have the proper executable header then it is
|
||
assumed to be a shell script. Execlp and execvp execute /bin/sh to
|
||
interpret the script. Under Minix-vmd this does not happen, a script
|
||
must begin with #! and the full path name of the interpreter if it is to
|
||
be an executable script.
|
||
|
||
SEE ALSO
|
||
execve(2), fork(2), environ(7), sh(1).
|
||
|
||
DIAGNOSTICS
|
||
If the file cannot be found, if it is not executable, if it does not
|
||
start with a valid magic number (see a.out(5)), if maximum memory is
|
||
exceeded, or if the arguments require too much space, a return
|
||
constitutes the diagnostic; the return value is -1 and errno is set as
|
||
for execve. Even for the super-user, at least one of the execute-
|
||
permission bits must be set for a file to be executed.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
5BSD April 25, 1986 2
|
||
|