Blame


1 cfa37a7b 2004-04-10 devnull .TH EXEC 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull exec, execl, _clock, _privates, _nprivates \- execute a file
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .PP
9 cfa37a7b 2004-04-10 devnull .nf
10 cfa37a7b 2004-04-10 devnull .B
11 cfa37a7b 2004-04-10 devnull int exec(char *name, char* argv[])
12 cfa37a7b 2004-04-10 devnull .PP
13 cfa37a7b 2004-04-10 devnull .B
14 cfa37a7b 2004-04-10 devnull int execl(char *name, ...)
15 cfa37a7b 2004-04-10 devnull .PP
16 cfa37a7b 2004-04-10 devnull .B
17 cfa37a7b 2004-04-10 devnull long *_clock;
18 cfa37a7b 2004-04-10 devnull .PP
19 cfa37a7b 2004-04-10 devnull .B
20 cfa37a7b 2004-04-10 devnull void **_privates;
21 cfa37a7b 2004-04-10 devnull .PP
22 cfa37a7b 2004-04-10 devnull .B
23 cfa37a7b 2004-04-10 devnull int _nprivates;
24 cfa37a7b 2004-04-10 devnull .fi
25 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
26 cfa37a7b 2004-04-10 devnull .I Exec
27 cfa37a7b 2004-04-10 devnull and
28 cfa37a7b 2004-04-10 devnull .I execl
29 cfa37a7b 2004-04-10 devnull overlay the calling process with the named file, then
30 cfa37a7b 2004-04-10 devnull transfer to the entry point of the image of the file.
31 cfa37a7b 2004-04-10 devnull .PP
32 cfa37a7b 2004-04-10 devnull .I Name
33 cfa37a7b 2004-04-10 devnull points to the name of the file
34 cfa37a7b 2004-04-10 devnull to be executed; it must not be a directory, and the permissions
35 cfa37a7b 2004-04-10 devnull must allow the current user to execute it
36 cfa37a7b 2004-04-10 devnull (see
37 bf8a59fa 2004-04-11 devnull .IR stat (3)).
38 cfa37a7b 2004-04-10 devnull It should also be a valid binary image, as defined in the
39 cfa37a7b 2004-04-10 devnull .IR a.out (6)
40 cfa37a7b 2004-04-10 devnull for the current machine architecture,
41 cfa37a7b 2004-04-10 devnull or a shell script
42 cfa37a7b 2004-04-10 devnull (see
43 cfa37a7b 2004-04-10 devnull .IR rc (1)).
44 cfa37a7b 2004-04-10 devnull The first line of a
45 cfa37a7b 2004-04-10 devnull shell script must begin with
46 cfa37a7b 2004-04-10 devnull .L #!
47 cfa37a7b 2004-04-10 devnull followed by the name of the program to interpret the file
48 cfa37a7b 2004-04-10 devnull and any initial arguments to that program, for example
49 cfa37a7b 2004-04-10 devnull .IP
50 cfa37a7b 2004-04-10 devnull .EX
51 cfa37a7b 2004-04-10 devnull #!/bin/rc
52 cfa37a7b 2004-04-10 devnull ls | mc
53 cfa37a7b 2004-04-10 devnull .EE
54 cfa37a7b 2004-04-10 devnull .PP
55 cfa37a7b 2004-04-10 devnull When a C program is executed,
56 cfa37a7b 2004-04-10 devnull it is called as follows:
57 cfa37a7b 2004-04-10 devnull .IP
58 cfa37a7b 2004-04-10 devnull .EX
59 cfa37a7b 2004-04-10 devnull void main(int argc, char *argv[])
60 cfa37a7b 2004-04-10 devnull .EE
61 cfa37a7b 2004-04-10 devnull .PP
62 cfa37a7b 2004-04-10 devnull .I Argv
63 cfa37a7b 2004-04-10 devnull is a copy of the array of argument pointers passed to
64 cfa37a7b 2004-04-10 devnull .IR exec ;
65 cfa37a7b 2004-04-10 devnull that array must end in a null pointer, and
66 cfa37a7b 2004-04-10 devnull .I argc
67 cfa37a7b 2004-04-10 devnull is the number of elements before the null pointer.
68 cfa37a7b 2004-04-10 devnull By convention, the first argument should be the name of
69 cfa37a7b 2004-04-10 devnull the program to be executed.
70 cfa37a7b 2004-04-10 devnull .I Execl
71 cfa37a7b 2004-04-10 devnull is like
72 cfa37a7b 2004-04-10 devnull .I exec
73 cfa37a7b 2004-04-10 devnull except that
74 cfa37a7b 2004-04-10 devnull .I argv
75 cfa37a7b 2004-04-10 devnull will be an array of the parameters that follow
76 cfa37a7b 2004-04-10 devnull .I name
77 cfa37a7b 2004-04-10 devnull in the call. The last argument to
78 cfa37a7b 2004-04-10 devnull .I execl
79 cfa37a7b 2004-04-10 devnull must be a null pointer.
80 cfa37a7b 2004-04-10 devnull .PP
81 cfa37a7b 2004-04-10 devnull For a file beginning
82 cfa37a7b 2004-04-10 devnull .BR #! ,
83 cfa37a7b 2004-04-10 devnull the arguments passed to the program
84 cfa37a7b 2004-04-10 devnull .RB ( /bin/rc
85 cfa37a7b 2004-04-10 devnull in the example above) will be the name of the file being
86 cfa37a7b 2004-04-10 devnull executed, any arguments on the
87 cfa37a7b 2004-04-10 devnull .B #!
88 cfa37a7b 2004-04-10 devnull line, the name of the file again,
89 cfa37a7b 2004-04-10 devnull and finally the second and subsequent arguments given to the original
90 cfa37a7b 2004-04-10 devnull .I exec
91 cfa37a7b 2004-04-10 devnull call.
92 cfa37a7b 2004-04-10 devnull The result honors the two conventions of a program accepting as argument
93 cfa37a7b 2004-04-10 devnull a file to be interpreted and
94 cfa37a7b 2004-04-10 devnull .B argv[0]
95 cfa37a7b 2004-04-10 devnull naming the file being
96 cfa37a7b 2004-04-10 devnull executed.
97 cfa37a7b 2004-04-10 devnull .PP
98 cfa37a7b 2004-04-10 devnull Most attributes of the calling process are carried
99 cfa37a7b 2004-04-10 devnull into the result; in particular,
100 cfa37a7b 2004-04-10 devnull files remain open across
101 cfa37a7b 2004-04-10 devnull .I exec
102 cfa37a7b 2004-04-10 devnull (except those opened with
103 cfa37a7b 2004-04-10 devnull .B OCEXEC
104 cfa37a7b 2004-04-10 devnull OR'd
105 cfa37a7b 2004-04-10 devnull into the open mode; see
106 bf8a59fa 2004-04-11 devnull .IR open (3));
107 cfa37a7b 2004-04-10 devnull and the working directory and environment
108 cfa37a7b 2004-04-10 devnull (see
109 cfa37a7b 2004-04-10 devnull .IR env (3))
110 cfa37a7b 2004-04-10 devnull remain the same.
111 cfa37a7b 2004-04-10 devnull However, a newly
112 cfa37a7b 2004-04-10 devnull .I exec'ed
113 cfa37a7b 2004-04-10 devnull process has no notification handler
114 cfa37a7b 2004-04-10 devnull (see
115 bf8a59fa 2004-04-11 devnull .IR notify (3)).
116 cfa37a7b 2004-04-10 devnull .PP
117 cfa37a7b 2004-04-10 devnull When the new program begins, the global cell
118 cfa37a7b 2004-04-10 devnull .B _clock
119 cfa37a7b 2004-04-10 devnull is set to the address of a cell that keeps approximate time
120 cfa37a7b 2004-04-10 devnull expended by the process at user level.
121 cfa37a7b 2004-04-10 devnull The time is measured in milliseconds but is updated at
122 cfa37a7b 2004-04-10 devnull a system-dependent lower rate.
123 cfa37a7b 2004-04-10 devnull This clock is typically used by the profiler but is available
124 cfa37a7b 2004-04-10 devnull to all programs.
125 cfa37a7b 2004-04-10 devnull .PP
126 cfa37a7b 2004-04-10 devnull The global cell
127 cfa37a7b 2004-04-10 devnull .B _privates
128 cfa37a7b 2004-04-10 devnull points to an array of
129 cfa37a7b 2004-04-10 devnull .B _nprivates
130 cfa37a7b 2004-04-10 devnull elements of per-process private data.
131 cfa37a7b 2004-04-10 devnull This storage is private for each process, even if the processes share data segments.
132 cfa37a7b 2004-04-10 devnull .PP
133 cfa37a7b 2004-04-10 devnull The above conventions apply to C programs; the raw system
134 cfa37a7b 2004-04-10 devnull interface to the new image is as follows:
135 cfa37a7b 2004-04-10 devnull the word pointed to by the stack pointer is
136 cfa37a7b 2004-04-10 devnull .BR argc ;
137 cfa37a7b 2004-04-10 devnull the words beyond that are the zeroth and subsequent elements
138 cfa37a7b 2004-04-10 devnull of
139 cfa37a7b 2004-04-10 devnull .BR argv ,
140 cfa37a7b 2004-04-10 devnull followed by a terminating null pointer; and
141 cfa37a7b 2004-04-10 devnull the return register (e.g.
142 cfa37a7b 2004-04-10 devnull .B R0
143 cfa37a7b 2004-04-10 devnull on the 68020) contains the address of the clock.
144 cfa37a7b 2004-04-10 devnull .SH SOURCE
145 b5fdffee 2004-04-19 devnull .B /usr/local/plan9/src/libc/9syscall
146 cfa37a7b 2004-04-10 devnull .br
147 b5fdffee 2004-04-19 devnull .B /usr/local/plan9/src/libc/port/execl.c
148 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
149 cfa37a7b 2004-04-10 devnull .IR prof (1),
150 bf8a59fa 2004-04-11 devnull .IR intro (3),
151 bf8a59fa 2004-04-11 devnull .IR stat (3)
152 cfa37a7b 2004-04-10 devnull .SH DIAGNOSTICS
153 cfa37a7b 2004-04-10 devnull If these functions fail, they return and set
154 cfa37a7b 2004-04-10 devnull .IR errstr .
155 cfa37a7b 2004-04-10 devnull There can be no return from a successful
156 cfa37a7b 2004-04-10 devnull .I exec
157 cfa37a7b 2004-04-10 devnull or
158 cfa37a7b 2004-04-10 devnull .IR execl ;
159 cfa37a7b 2004-04-10 devnull the calling image is lost.