mirror of
https://github.com/9fans/plan9port.git
synced 2025-01-12 11:10:07 +00:00
160 lines
3.4 KiB
Groff
160 lines
3.4 KiB
Groff
|
.TH EXEC 3
|
||
|
.SH NAME
|
||
|
exec, execl, _clock, _privates, _nprivates \- execute a file
|
||
|
.SH SYNOPSIS
|
||
|
.B #include <u.h>
|
||
|
.br
|
||
|
.B #include <libc.h>
|
||
|
.PP
|
||
|
.nf
|
||
|
.B
|
||
|
int exec(char *name, char* argv[])
|
||
|
.PP
|
||
|
.B
|
||
|
int execl(char *name, ...)
|
||
|
.PP
|
||
|
.B
|
||
|
long *_clock;
|
||
|
.PP
|
||
|
.B
|
||
|
void **_privates;
|
||
|
.PP
|
||
|
.B
|
||
|
int _nprivates;
|
||
|
.fi
|
||
|
.SH DESCRIPTION
|
||
|
.I Exec
|
||
|
and
|
||
|
.I execl
|
||
|
overlay the calling process with the named file, then
|
||
|
transfer to the entry point of the image of the file.
|
||
|
.PP
|
||
|
.I Name
|
||
|
points to the name of the file
|
||
|
to be executed; it must not be a directory, and the permissions
|
||
|
must allow the current user to execute it
|
||
|
(see
|
||
|
.IR stat (2)).
|
||
|
It should also be a valid binary image, as defined in the
|
||
|
.IR a.out (6)
|
||
|
for the current machine architecture,
|
||
|
or a shell script
|
||
|
(see
|
||
|
.IR rc (1)).
|
||
|
The first line of a
|
||
|
shell script must begin with
|
||
|
.L #!
|
||
|
followed by the name of the program to interpret the file
|
||
|
and any initial arguments to that program, for example
|
||
|
.IP
|
||
|
.EX
|
||
|
#!/bin/rc
|
||
|
ls | mc
|
||
|
.EE
|
||
|
.PP
|
||
|
When a C program is executed,
|
||
|
it is called as follows:
|
||
|
.IP
|
||
|
.EX
|
||
|
void main(int argc, char *argv[])
|
||
|
.EE
|
||
|
.PP
|
||
|
.I Argv
|
||
|
is a copy of the array of argument pointers passed to
|
||
|
.IR exec ;
|
||
|
that array must end in a null pointer, and
|
||
|
.I argc
|
||
|
is the number of elements before the null pointer.
|
||
|
By convention, the first argument should be the name of
|
||
|
the program to be executed.
|
||
|
.I Execl
|
||
|
is like
|
||
|
.I exec
|
||
|
except that
|
||
|
.I argv
|
||
|
will be an array of the parameters that follow
|
||
|
.I name
|
||
|
in the call. The last argument to
|
||
|
.I execl
|
||
|
must be a null pointer.
|
||
|
.PP
|
||
|
For a file beginning
|
||
|
.BR #! ,
|
||
|
the arguments passed to the program
|
||
|
.RB ( /bin/rc
|
||
|
in the example above) will be the name of the file being
|
||
|
executed, any arguments on the
|
||
|
.B #!
|
||
|
line, the name of the file again,
|
||
|
and finally the second and subsequent arguments given to the original
|
||
|
.I exec
|
||
|
call.
|
||
|
The result honors the two conventions of a program accepting as argument
|
||
|
a file to be interpreted and
|
||
|
.B argv[0]
|
||
|
naming the file being
|
||
|
executed.
|
||
|
.PP
|
||
|
Most attributes of the calling process are carried
|
||
|
into the result; in particular,
|
||
|
files remain open across
|
||
|
.I exec
|
||
|
(except those opened with
|
||
|
.B OCEXEC
|
||
|
OR'd
|
||
|
into the open mode; see
|
||
|
.IR open (2));
|
||
|
and the working directory and environment
|
||
|
(see
|
||
|
.IR env (3))
|
||
|
remain the same.
|
||
|
However, a newly
|
||
|
.I exec'ed
|
||
|
process has no notification handler
|
||
|
(see
|
||
|
.IR notify (2)).
|
||
|
.PP
|
||
|
When the new program begins, the global cell
|
||
|
.B _clock
|
||
|
is set to the address of a cell that keeps approximate time
|
||
|
expended by the process at user level.
|
||
|
The time is measured in milliseconds but is updated at
|
||
|
a system-dependent lower rate.
|
||
|
This clock is typically used by the profiler but is available
|
||
|
to all programs.
|
||
|
.PP
|
||
|
The global cell
|
||
|
.B _privates
|
||
|
points to an array of
|
||
|
.B _nprivates
|
||
|
elements of per-process private data.
|
||
|
This storage is private for each process, even if the processes share data segments.
|
||
|
.PP
|
||
|
The above conventions apply to C programs; the raw system
|
||
|
interface to the new image is as follows:
|
||
|
the word pointed to by the stack pointer is
|
||
|
.BR argc ;
|
||
|
the words beyond that are the zeroth and subsequent elements
|
||
|
of
|
||
|
.BR argv ,
|
||
|
followed by a terminating null pointer; and
|
||
|
the return register (e.g.
|
||
|
.B R0
|
||
|
on the 68020) contains the address of the clock.
|
||
|
.SH SOURCE
|
||
|
.B /sys/src/libc/9syscall
|
||
|
.br
|
||
|
.B /sys/src/libc/port/execl.c
|
||
|
.SH SEE ALSO
|
||
|
.IR prof (1),
|
||
|
.IR intro (2),
|
||
|
.IR stat (2)
|
||
|
.SH DIAGNOSTICS
|
||
|
If these functions fail, they return and set
|
||
|
.IR errstr .
|
||
|
There can be no return from a successful
|
||
|
.I exec
|
||
|
or
|
||
|
.IR execl ;
|
||
|
the calling image is lost.
|