|
|
1.1 root 1: .TH INTRO 2
2: .de en
3: .HP
4: \\$1 \fL\\$2\fP \\$3
5: .br
6: ..
7: .SH NAME
8: intro, errno \(mi introduction to system calls and error numbers
9: .SH SYNOPSIS
10: .B #include <errno.h>
11: .SH DESCRIPTION
12: Section 2 describes the entries into the operating system.
13: .SS "File I/O"
14: Files are opened for input or output
15: by
16: .IR open (2)
17: or
18: .IR creat .
19: These calls return a integer called a
20: .IR "file descriptor"
21: which identifies the file
22: to subsequent I/O calls,
23: notably
24: .IR read (2)
25: and
26: .IR write .
27: File descriptors range from 0 to 127 in the current system.
28: The system gets to pick the numbers,
29: but they may be reassigned by
30: .IR dup (2)
31: and
32: .IR dup2 .
33: .PP
34: By agreement among user programs,
35: file descriptor 0 is the standard input,
36: 1 is the standard output,
37: 2 is for error messages,
38: and 3 is the controlling terminal if any.
39: The operating system is unaware of these conventions;
40: it is permissible to close file 0,
41: or even to replace it by a file open only for writing,
42: but many programs will be confused by such chicanery.
43: .PP
44: Files are normally read or written in sequential order.
45: .IR Lseek (2)
46: addresses arbitrary locations.
47: .PP
48: Files have associated status,
49: consisting of ownerships,
50: permission modes,
51: access dates,
52: and so on.
53: The status is retrieved by
54: .IR stat (2);
55: the calls in
56: .IR chmod (2)
57: alter parts of it.
58: .PP
59: New files are made with
60: .I creat
61: (in
62: .IR open (2)).
63: An existing file may be given an additional name
64: by
65: .IR link (2)
66: or
67: .IR symlink ;
68: names are removed by
69: .IR unlink (2).
70: Directories are created and removed by
71: .IR mkdir (2)
72: and
73: .IR rmdir .
74: .PP
75: Device files and communication channels
76: (streams)
77: admit a plethora of special operations,
78: most specific to the device in question;
79: see
80: .IR ioctl (2)
81: and the device writeups in section 4,
82: especially
83: .IR ttyld (4)
84: for terminals
85: and
86: .IR stream (4)
87: for communications.
88: .IR Pipe (2)
89: creates nameless streams,
90: useful for local communication.
91: Several streams may be monitored in parallel by
92: .IR select (2).
93: .SS "Process execution and control"
94: A new process is created
95: when an existing one calls
96: .IR fork (2).
97: The new (child) process starts out with
98: copies of the address space and most other attributes
99: of the old (parent) process.
100: In particular,
101: the child starts out running
102: the same program as the parent;
103: .IR exec (2)
104: will bring in a different one.
105: .PP
106: Each process has an integer process id,
107: unique among all currently active processes;
108: a process group id,
109: used to distribute signals
110: among processes in the same session
111: or window;
112: a userid and groupid,
113: which determine access permissions;
114: and
115: a character-string login name
116: for the current user
117: (not the same as permissions).
118: The calls in
119: .IR getuid (2)
120: retrieve and change these values.
121: .PP
122: Various events cause software traps (signals):
123: program errors like addressing violations,
124: software events like the interrupt key on the terminal,
125: the alarm clock set by
126: .IR alarm (2),
127: calls to
128: .IR kill
129: (in
130: .IR signal (2)).
131: Most signals terminate the process by default;
132: .IR signal (2)
133: will arrange to trap or ignore them instead.
134: .PP
135: A process terminates
136: on receiving a signal
137: or by calling
138: .IR exit (2).
139: A parent process may call
140: .I wait
141: (in
142: .IR exit (2))
143: to wait for some child to terminate.
144: A single byte of status information
145: may be passed from
146: .I exit
147: to
148: .IR wait .
149: .SS "Timekeeping"
150: .IR Time (2)
151: and
152: .I ftime
153: return the time of day
154: and related information.
155: .IR Times (2)
156: returns runtime accounting
157: for this process
158: and its children.
159: .IR Profil
160: arranges to increment various locations
161: in memory whenever the clock ticks;
162: it is useful for execution profiling.
163: .PP
164: .IR Times ,
165: .IR profil ,
166: and a few other calls
167: measure time in clock ticks.
168: The clock frequency is given by the constant
169: .B HZ
170: in
171: .BR <sys/param.h> ;
172: 60 ticks per second
173: in this system.
174: .SH SEE ALSO
175: .IR intro (3),
176: .IR perror (3)
177: .SH DIAGNOSTICS
178: A `Diagnostics' paragraph appears in the page for each system call
179: that has an error return.
180: Unless otherwise stated, the error value is the integer \-1,
181: and the success value is 0.
182: When an error occurs,
183: an error number is assigned to
184: the external variable
185: .IR errno .
186: .I Errno
187: is not cleared on successful calls, so it should be tested only
188: after an error has occurred.
189: .PP
190: There is a table of messages that describe the errors
191: and a routine for printing them;
192: see
193: .IR perror (3).
194: The list below gives
195: the number, the name (as defined in
196: .BR <errno.h> ),
197: and the
198: .I perror
199: message for each error type.
200: The reasons for error returns are explained in general terms;
201: further explanations for less obvious error returns
202: appear in the writeups of individual system calls.
203: .en 0 \h'\w'EIO'u' "Error 0
204: No error has occurred.
205: .en 1 EPERM "Not owner
206: An attempt was made to modify a file in some way forbidden
207: except to its owner or the super-user,
208: or an ordinary user attempted to do something
209: allowed only to the super-user.
210: .en 2 ENOENT "No such file or directory
211: A file name was specified
212: and the file should exist but didn't, or one
213: of the directories in a path name did not exist.
214: .en 3 ESRCH "No such process
215: The process whose number was given to
216: .I kill
217: did not exist, or was already dead.
218: .en 4 EINTR "Interrupted system call
219: A signal
220: which the user has elected to catch
221: occurred during a system call.
222: If execution is resumed
223: after processing the signal,
224: it will appear as if the interrupted system call
225: returned this error condition.
226: .en 5 EIO "I/O error
227: A physical I/O error
228: or timeout occurred,
229: usually in
230: .IR read ,
231: .IR write ,
232: or
233: .IR ioctl .
234: This error may in some cases be returned
235: on a call following the one to which it actually applies.
236: .en 6 ENXIO "No such device or address
237: I/O on a special file referred to a device which does not
238: exist or is off line,
239: or beyond the limits of the device.
240: .en 7 E2BIG "Arg list too long
241: An argument list longer than 16384 bytes
242: was presented to
243: .IR exec .
244: .en 8 ENOEXEC "Exec format error
245: A request was made to execute a file
246: which, although it had the appropriate permissions,
247: did not start with a valid magic number, see
248: .IR a.out (5).
249: .en 9 EBADF "Bad file number
250: A file descriptor referred to no
251: open file,
252: or a
253: .I read
254: (resp.
255: /IR write )
256: a file which was open only for writing (resp. reading).
257: .en 10 ECHILD "No children
258: In
259: .IR wait ,
260: the process had no
261: living or unwaited-for children.
262: .en 11 EAGAIN "No more processes
263: In
264: .IR fork ,
265: the system's process table was full
266: or the user was not allowed to create any more
267: processes.
268: .en 12 ENOMEM "Not enough memory
269: During
270: .I exec
271: or
272: .I brk,
273: a program asked for more memory or swap space
274: than the system was able to supply.
275: .en 13 EACCES "Permission denied
276: An attempt was made to access a file in a way forbidden
277: by the protection system.
278: .en 14 EFAULT "Bad address
279: The system encountered a hardware fault in attempting to
280: access the arguments of a system call.
281: .en 15 EHASF "Directory not empty
282: An attempt was made to remove a nonempty directory.
283: .en 16 EBUSY "In use
284: An attempt was made to mount a device that was already mounted
285: (or crashed or was copied in mounted state),
286: to dismount a device
287: on which there was an active file
288: (open file, current directory, mounted-on file, active text segment),
289: or to remove the current directory of some process.
290: .en 17 EEXIST "File exists
291: An existing file was mentioned in an inappropriate context,
292: e.g.
293: .IR link .
294: .en 18 EXDEV "Cross-device link
295: A link to a file on another device
296: was attempted.
297: .en 19 ENODEV "No such device
298: An attempt was made to apply an inappropriate
299: system call to a device;
300: e.g. read a write-only device.
301: .en 20 ENOTDIR "Not a directory
302: A non-directory was specified where a directory
303: is required,
304: for example in a path name or
305: as an argument to
306: .IR chdir .
307: .en 21 EISDIR "Is a directory
308: An attempt to write on a directory.
309: .en 22 EINVAL "Invalid argument
310: Some invalid argument:
311: dismounting a non-mounted
312: device,
313: mentioning an unknown signal in
314: .IR signal ,
315: reading or writing a file for which
316: .I lseek
317: has generated a negative pointer.
318: Also set by math functions, see
319: .IR intro (3).
320: .en 23 ENFILE "File table overflow
321: The system's table of open files was full,
322: and temporarily no more
323: .I opens
324: could be accepted.
325: .en 24 EMFILE "Too many open files
326: The limit is 128 per process.
327: .en 25 ENOTTY "Illegal ioctl
328: The function code mentioned in
329: .I ioctl
330: does not apply to the file or device.
331: .en 26 ETXTBSY "Text file busy
332: An attempt to execute a pure-procedure
333: program which was open for writing,
334: or to open for writing a pure-procedure
335: program that was being executed.
336: .en 27 EFBIG "File too large
337: The size of a file exceeded the maximum (about
338: .if t 10\u\s-29\s+2\d
339: .if n 1.0E9
340: bytes).
341: .en 28 ENOSPC "No space left on device
342: During a
343: .I write
344: to an ordinary file,
345: there was no free space left on the device.
346: .en 29 ESPIPE "Illegal seek
347: .I Lseek
348: was issued to a stream device.
349: .en 30 EROFS "Read-only file system
350: An attempt to modify a file or directory
351: was made
352: on a device mounted read-only.
353: .en 31 EMLINK "Too many links
354: An attempt to make more than 32767 links to a file.
355: .en 32 EPIPE "Broken pipe
356: .I Write
357: to a stream that has been hung up,
358: usually a pipe with no process to read the data.
359: This condition normally generates a signal;
360: the error is returned if the signal is ignored.
361: .en 33 EDOM "Math argument
362: The argument of a function in the math package (3M)
363: was out of the domain of the function.
364: .en 34 ERANGE "Result too large
365: The value of a function in the math package (3M)
366: was unrepresentable within machine precision.
367: .en 35 ELOOP "Link loop
368: An endless cycle of symbolic links was encountered.
369: .en 36 ECONC "Concurrency violation
370: An
371: .I open
372: or
373: .I creat
374: was in violation of the concurrent access specified
375: for the file.
376: .en 37 EGREG "It's all Greg's fault
377: Something went wrong.
378: .SH BUGS
379: Device and file system drivers
380: may use error codes in
381: unexpected or unconventional ways;
382: it is infeasible to list them all.
383: The writeups in section 4
384: list some such special cases.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.