197 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" Copyright (c) 1983 Regents of the University of California.
 | |
| .\" All rights reserved.  The Berkeley software License Agreement
 | |
| .\" specifies the terms and conditions for redistribution.
 | |
| .\"
 | |
| .\"	@(#)execl.3	6.2 (Berkeley) 4/25/86
 | |
| .\"
 | |
| .TH EXECL 3 "April 25, 1986"
 | |
| .UC 5
 | |
| .SH NAME
 | |
| execl, execv, execle, execlp, execvp, exec, environ \- execute a file
 | |
| .SH SYNOPSIS
 | |
| .ft B
 | |
| #include <unistd.h>
 | |
| 
 | |
| .in +.5i
 | |
| .ti -.5i
 | |
| int execl(const char *\fIname\fP, const char *\fIarg0\fP, ..., (char *) NULL)
 | |
| .ti -.5i
 | |
| int execv(const char *\fIname\fP, char *const \fIargv\fP[])
 | |
| .ti -.5i
 | |
| int execle(const char *\fIname\fP, const char *\fIarg0\fP, ..., (char *) NULL, char *const \fIenvp\fP[])
 | |
| .ti -.5i
 | |
| int execlp(const char *\fIname\fP, const char *\fIarg0\fP, ..., (char *) NULL)
 | |
| .ti -.5i
 | |
| int execvp(const char *\fIname\fP, char *const \fIargv\fP[])
 | |
| .in -.5i
 | |
| 
 | |
| extern char *const *environ;
 | |
| .fi
 | |
| .SH DESCRIPTION
 | |
| These routines provide various interfaces to the
 | |
| .B execve 
 | |
| system call.  Refer to 
 | |
| .BR  execve (2)
 | |
| for a description of their properties; only
 | |
| brief descriptions are provided here.
 | |
| .PP
 | |
| .B 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.
 | |
| .PP
 | |
| The
 | |
| .I name
 | |
| argument
 | |
| is a pointer to the name of the file
 | |
| to be executed.
 | |
| The pointers
 | |
| .IR arg [ 0 ],
 | |
| .IR arg [ 1 "] ..."
 | |
| address null-terminated strings.
 | |
| Conventionally
 | |
| .IR arg [ 0 ]
 | |
| is the name of the
 | |
| file.
 | |
| .PP
 | |
| Two interfaces are available.
 | |
| .B execl
 | |
| is useful when a known file with known arguments is
 | |
| being called;
 | |
| the arguments to
 | |
| .B 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
 | |
| .B execl*
 | |
| functions are variable argument functions.  This means that the type
 | |
| of the arguments beyond
 | |
| .I arg0
 | |
| is not checked.  So the null pointer requires an explicit cast to type
 | |
| .B "(char *)"
 | |
| if not of that type already.)
 | |
| .PP
 | |
| The
 | |
| .B execv
 | |
| version is useful when the number of arguments is unknown
 | |
| in advance;
 | |
| the arguments to
 | |
| .B 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.
 | |
| .PP
 | |
| When a C program is executed,
 | |
| it is called as follows:
 | |
| .PP
 | |
| .RS
 | |
| .ft B
 | |
| .nf
 | |
| int main(int \fIargc\fP, char *const \fIargv\fP[], char *const \fIenvp\fP[]);
 | |
| 
 | |
| exit(main(\fIargc\fP, \fIargv\fP, \fIenvp\fP));
 | |
| .fi
 | |
| .ft R
 | |
| .RE
 | |
| .PP
 | |
| where
 | |
| .I argc
 | |
| is the argument count
 | |
| and
 | |
| .I argv 
 | |
| is an array of character pointers
 | |
| to the arguments themselves.
 | |
| As indicated,
 | |
| .I argc
 | |
| is conventionally at least one
 | |
| and the first member of the array points to a
 | |
| string containing the name of the file.
 | |
| .PP
 | |
| .I Argv
 | |
| is directly usable in another
 | |
| .B execv
 | |
| because
 | |
| .IR argv [ argc ]
 | |
| is 0.
 | |
| .PP
 | |
| .I Envp
 | |
| is a pointer to an array of strings that constitute
 | |
| the
 | |
| .I environment
 | |
| of the process.
 | |
| Each string consists of a name, an \*(lq=\*(rq, and a null-terminated value.
 | |
| The array of pointers is terminated by a null pointer.
 | |
| The shell
 | |
| .BR sh (1)
 | |
| passes an environment entry for each global shell variable
 | |
| defined when the program is called.
 | |
| See
 | |
| .BR environ (7)
 | |
| for some conventionally
 | |
| used names.
 | |
| The C run-time start-off routine places a copy of
 | |
| .I envp
 | |
| in the global cell
 | |
| .BR environ ,
 | |
| which is used
 | |
| by
 | |
| .B execv
 | |
| and
 | |
| .B execl
 | |
| to pass the environment to any subprograms executed by the
 | |
| current program.
 | |
| .PP
 | |
| .B Execlp
 | |
| and
 | |
| .B execvp
 | |
| are called with the same arguments as
 | |
| .B execl
 | |
| and
 | |
| .BR 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
 | |
| .BR PATH .
 | |
| Under standard MINIX 3, 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.
 | |
| .B Execlp
 | |
| and
 | |
| .B execvp
 | |
| execute
 | |
| .B /bin/sh
 | |
| to interpret the script.
 | |
| Under Minix-vmd this does not happen, a script must begin with
 | |
| .B #!
 | |
| and the full path name of the interpreter if it is to be an
 | |
| executable script.
 | |
| .SH "SEE ALSO"
 | |
| .BR execve (2),
 | |
| .BR fork (2),
 | |
| .BR environ (7),
 | |
| .BR sh (1).
 | |
| .SH DIAGNOSTICS
 | |
| If the file cannot be found,
 | |
| if it is not executable,
 | |
| if it does not start with a valid magic number (see
 | |
| .BR 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
 | |
| .B errno
 | |
| is set as for
 | |
| .BR execve .
 | |
| Even for the super-user,
 | |
| at least one of the execute-permission bits must be set for
 | |
| a file to be executed.
 | 
