Deleted Added
full compact
1.\" Copyright (c) 1980, 1983, 1986, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\" notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\" notice, this list of conditions and the following disclaimer in the
11.\" documentation and/or other materials provided with the distribution.
12.\" 4. Neither the name of the University nor the names of its contributors
13.\" may be used to endorse or promote products derived from this software
14.\" without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.\" @(#)intro.2 8.5 (Berkeley) 2/27/95
29.\" $FreeBSD: head/lib/libc/sys/intro.2 249979 2013-04-27 11:55:23Z jilles $
29.\" $FreeBSD: head/lib/libc/sys/intro.2 250250 2013-05-04 19:07:22Z pluknet $
30.\"
31.Dd April 27, 2013
31.Dd May 4, 2013
32.Dt INTRO 2
33.Os
34.Sh NAME
35.Nm intro
36.Nd introduction to system calls and error numbers
37.Sh LIBRARY
38.Lb libc
39.Sh SYNOPSIS
40.In errno.h
41.Sh DESCRIPTION
42This section provides an overview of the system calls,
43their error returns, and other common definitions and concepts.
44.\".Pp
45.\".Sy System call restart
46.\".Pp
47.\"(more later...)
48.Sh RETURN VALUES
49Nearly all of the system calls provide an error number referenced via
50the external identifier errno.
51This identifier is defined in
52.In sys/errno.h
53as
54.Pp
55.Dl extern int * __error();
56.Dl #define errno (* __error())
57.Pp
58The
59.Va __error()
60function returns a pointer to a field in the thread specific structure for
61threads other than the initial thread.
62For the initial thread and
63non-threaded processes,
64.Va __error()
65returns a pointer to a global
66.Va errno
67variable that is compatible with the previous definition.
68.Pp
69When a system call detects an error,
70it returns an integer value
71indicating failure (usually -1)
72and sets the variable
73.Va errno
74accordingly.
75(This allows interpretation of the failure on receiving
76a -1 and to take action accordingly.)
77Successful calls never set
78.Va errno ;
79once set, it remains until another error occurs.
80It should only be examined after an error.
81Note that a number of system calls overload the meanings of these
82error numbers, and that the meanings must be interpreted according
83to the type and circumstances of the call.
84.Pp
85The following is a complete list of the errors and their
86names as given in
87.In sys/errno.h .
88.Bl -hang -width Ds
89.It Er 0 Em "Undefined error: 0" .
90Not used.
91.It Er 1 EPERM Em "Operation not permitted" .
92An attempt was made to perform an operation limited to processes
93with appropriate privileges or to the owner of a file or other
94resources.
95.It Er 2 ENOENT Em "No such file or directory" .
96A component of a specified pathname did not exist, or the
97pathname was an empty string.
98.It Er 3 ESRCH Em "No such process" .
99No process could be found corresponding to that specified by the given
100process ID.
101.It Er 4 EINTR Em "Interrupted system call" .
102An asynchronous signal (such as
103.Dv SIGINT
104or
105.Dv SIGQUIT )
106was caught by the process during the execution of an interruptible
107function.
108If the signal handler performs a normal return, the
109interrupted system call will seem to have returned the error condition.
110.It Er 5 EIO Em "Input/output error" .
111Some physical input or output error occurred.
112This error will not be reported until a subsequent operation on the same file
113descriptor and may be lost (over written) by any subsequent errors.
114.It Er 6 ENXIO Em "Device not configured" .
115Input or output on a special file referred to a device that did not
116exist, or
117made a request beyond the limits of the device.
118This error may also occur when, for example,
119a tape drive is not online or no disk pack is
120loaded on a drive.
121.It Er 7 E2BIG Em "Argument list too long" .
122The number of bytes used for the argument and environment
123list of the new process exceeded the current limit
124.Dv ( NCARGS
125in
126.In sys/param.h ) .
127.It Er 8 ENOEXEC Em "Exec format error" .
128A request was made to execute a file
129that, although it has the appropriate permissions,
130was not in the format required for an
131executable file.
132.It Er 9 EBADF Em "Bad file descriptor" .
133A file descriptor argument was out of range, referred to no open file,
134or a read (write) request was made to a file that was only open for
135writing (reading).
136.Pp
137.It Er 10 ECHILD Em "\&No child processes" .
138A
139.Xr wait 2
140or
141.Xr waitpid 2
142function was executed by a process that had no existing or unwaited-for
143child processes.
144.It Er 11 EDEADLK Em "Resource deadlock avoided" .
145An attempt was made to lock a system resource that
146would have resulted in a deadlock situation.
147.It Er 12 ENOMEM Em "Cannot allocate memory" .
148The new process image required more memory than was allowed by the hardware
149or by system-imposed memory management constraints.
150A lack of swap space is normally temporary; however,
151a lack of core is not.
152Soft limits may be increased to their corresponding hard limits.
153.It Er 13 EACCES Em "Permission denied" .
154An attempt was made to access a file in a way forbidden
155by its file access permissions.
156.It Er 14 EFAULT Em "Bad address" .
157The system detected an invalid address in attempting to
158use an argument of a call.
159.It Er 15 ENOTBLK Em "Block device required" .
160A block device operation was attempted on a non-block device or file.
161.It Er 16 EBUSY Em "Device busy" .
162An attempt to use a system resource which was in use at the time
163in a manner which would have conflicted with the request.
164.It Er 17 EEXIST Em "File exists" .
165An existing file was mentioned in an inappropriate context,
166for instance, as the new link name in a
167.Xr link 2
168system call.
169.It Er 18 EXDEV Em "Cross-device link" .
170A hard link to a file on another file system
171was attempted.
172.It Er 19 ENODEV Em "Operation not supported by device" .
173An attempt was made to apply an inappropriate
174function to a device,
175for example,
176trying to read a write-only device such as a printer.
177.It Er 20 ENOTDIR Em "Not a directory" .
178A component of the specified pathname existed, but it was
179not a directory, when a directory was expected.
180.It Er 21 EISDIR Em "Is a directory" .
181An attempt was made to open a directory with write mode specified.
182.It Er 22 EINVAL Em "Invalid argument" .
183Some invalid argument was supplied.
184(For example,
185specifying an undefined signal to a
186.Xr signal 3
187function
188or a
189.Xr kill 2
190system call).
191.It Er 23 ENFILE Em "Too many open files in system" .
192Maximum number of open files allowable on the system
193has been reached and requests for an open cannot be satisfied
194until at least one has been closed.
195.It Er 24 EMFILE Em "Too many open files" .
196Maximum number of file descriptors allowable in the process
197has been reached and requests for an open cannot be satisfied
198until at least one has been closed.
199The
200.Xr getdtablesize 2
201system call will obtain the current limit.
202.It Er 25 ENOTTY Em "Inappropriate ioctl for device" .
203A control function (see
204.Xr ioctl 2 )
205was attempted for a file or
206special device for which the operation was inappropriate.
207.It Er 26 ETXTBSY Em "Text file busy" .
208The new process was a pure procedure (shared text) file
209which was open for writing by another process, or
210while the pure procedure file was being executed an
211.Xr open 2
212call requested write access.
213.It Er 27 EFBIG Em "File too large" .
214The size of a file exceeded the maximum.
215.It Er 28 ENOSPC Em "No space left on device" .
216A
217.Xr write 2
218to an ordinary file, the creation of a
219directory or symbolic link, or the creation of a directory
220entry failed because no more disk blocks were available
221on the file system, or the allocation of an inode for a newly
222created file failed because no more inodes were available
223on the file system.
224.It Er 29 ESPIPE Em "Illegal seek" .
225An
226.Xr lseek 2
227system call was issued on a socket, pipe or
228.Tn FIFO .
229.It Er 30 EROFS Em "Read-only file system" .
230An attempt was made to modify a file or directory
231on a file system that was read-only at the time.
232.It Er 31 EMLINK Em "Too many links" .
233Maximum allowable hard links to a single file has been exceeded (limit
234of 32767 hard links per file).
235.It Er 32 EPIPE Em "Broken pipe" .
236A write on a pipe, socket or
237.Tn FIFO
238for which there is no process
239to read the data.
240.It Er 33 EDOM Em "Numerical argument out of domain" .
241A numerical input argument was outside the defined domain of the mathematical
242function.
243.It Er 34 ERANGE Em "Result too large" .
244A numerical result of the function was too large to fit in the
245available space (perhaps exceeded precision).
246.It Er 35 EAGAIN Em "Resource temporarily unavailable" .
247This is a temporary condition and later calls to the
248same routine may complete normally.
249.It Er 36 EINPROGRESS Em "Operation now in progress" .
250An operation that takes a long time to complete (such as
251a
252.Xr connect 2 )
253was attempted on a non-blocking object (see
254.Xr fcntl 2 ) .
255.It Er 37 EALREADY Em "Operation already in progress" .
256An operation was attempted on a non-blocking object that already
257had an operation in progress.
258.It Er 38 ENOTSOCK Em "Socket operation on non-socket" .
259Self-explanatory.
260.It Er 39 EDESTADDRREQ Em "Destination address required" .
261A required address was omitted from an operation on a socket.
262.It Er 40 EMSGSIZE Em "Message too long" .
263A message sent on a socket was larger than the internal message buffer
264or some other network limit.
265.It Er 41 EPROTOTYPE Em "Protocol wrong type for socket" .
266A protocol was specified that does not support the semantics of the
267socket type requested.
268For example, you cannot use the
269.Tn ARPA
270Internet
271.Tn UDP
272protocol with type
273.Dv SOCK_STREAM .
274.It Er 42 ENOPROTOOPT Em "Protocol not available" .
275A bad option or level was specified in a
276.Xr getsockopt 2
277or
278.Xr setsockopt 2
279call.
280.It Er 43 EPROTONOSUPPORT Em "Protocol not supported" .
281The protocol has not been configured into the
282system or no implementation for it exists.
283.It Er 44 ESOCKTNOSUPPORT Em "Socket type not supported" .
284The support for the socket type has not been configured into the
285system or no implementation for it exists.
286.It Er 45 EOPNOTSUPP Em "Operation not supported" .
287The attempted operation is not supported for the type of object referenced.
288Usually this occurs when a file descriptor refers to a file or socket
289that cannot support this operation,
290for example, trying to
291.Em accept
292a connection on a datagram socket.
293.It Er 46 EPFNOSUPPORT Em "Protocol family not supported" .
294The protocol family has not been configured into the
295system or no implementation for it exists.
296.It Er 47 EAFNOSUPPORT Em "Address family not supported by protocol family" .
297An address incompatible with the requested protocol was used.
298For example, you should not necessarily expect to be able to use
299.Tn NS
300addresses with
301.Tn ARPA
302Internet protocols.
303.It Er 48 EADDRINUSE Em "Address already in use" .
304Only one usage of each address is normally permitted.
305.Pp
306.It Er 49 EADDRNOTAVAIL Em "Can't assign requested address" .
307Normally results from an attempt to create a socket with an
308address not on this machine.
309.It Er 50 ENETDOWN Em "Network is down" .
310A socket operation encountered a dead network.
311.It Er 51 ENETUNREACH Em "Network is unreachable" .
312A socket operation was attempted to an unreachable network.
313.It Er 52 ENETRESET Em "Network dropped connection on reset" .
314The host you were connected to crashed and rebooted.
315.It Er 53 ECONNABORTED Em "Software caused connection abort" .
316A connection abort was caused internal to your host machine.
317.It Er 54 ECONNRESET Em "Connection reset by peer" .
318A connection was forcibly closed by a peer.
319This normally
320results from a loss of the connection on the remote socket
321due to a timeout or a reboot.
322.It Er 55 ENOBUFS Em "\&No buffer space available" .
323An operation on a socket or pipe was not performed because
324the system lacked sufficient buffer space or because a queue was full.
325.It Er 56 EISCONN Em "Socket is already connected" .
326A
327.Xr connect 2
328request was made on an already connected socket; or,
329a
330.Xr sendto 2
331or
332.Xr sendmsg 2
333request on a connected socket specified a destination
334when already connected.
335.It Er 57 ENOTCONN Em "Socket is not connected" .
336An request to send or receive data was disallowed because
337the socket was not connected and (when sending on a datagram socket)
338no address was supplied.
339.It Er 58 ESHUTDOWN Em "Can't send after socket shutdown" .
340A request to send data was disallowed because the socket
341had already been shut down with a previous
342.Xr shutdown 2
343call.
344.It Er 60 ETIMEDOUT Em "Operation timed out" .
345A
346.Xr connect 2
347or
348.Xr send 2
349request failed because the connected party did not
350properly respond after a period of time.
351(The timeout
352period is dependent on the communication protocol.)
353.It Er 61 ECONNREFUSED Em "Connection refused" .
354No connection could be made because the target machine actively
355refused it.
356This usually results from trying to connect
357to a service that is inactive on the foreign host.
358.It Er 62 ELOOP Em "Too many levels of symbolic links" .
359A path name lookup involved more than 32
360.Pq Dv MAXSYMLINKS
361symbolic links.
362.It Er 63 ENAMETOOLONG Em "File name too long" .
363A component of a path name exceeded
364.Brq Dv NAME_MAX
365characters, or an entire
366path name exceeded
367.Brq Dv PATH_MAX
368characters.
369(See also the description of
370.Dv _PC_NO_TRUNC
371in
372.Xr pathconf 2 . )
373.It Er 64 EHOSTDOWN Em "Host is down" .
374A socket operation failed because the destination host was down.
375.It Er 65 EHOSTUNREACH Em "No route to host" .
376A socket operation was attempted to an unreachable host.
377.It Er 66 ENOTEMPTY Em "Directory not empty" .
378A directory with entries other than
379.Ql .\&
380and
381.Ql ..\&
382was supplied to a remove directory or rename call.
383.It Er 67 EPROCLIM Em "Too many processes" .
384.It Er 68 EUSERS Em "Too many users" .
385The quota system ran out of table entries.
386.It Er 69 EDQUOT Em "Disc quota exceeded" .
387A
388.Xr write 2
389to an ordinary file, the creation of a
390directory or symbolic link, or the creation of a directory
391entry failed because the user's quota of disk blocks was
392exhausted, or the allocation of an inode for a newly
393created file failed because the user's quota of inodes
394was exhausted.
395.It Er 70 ESTALE Em "Stale NFS file handle" .
396An attempt was made to access an open file (on an
397.Tn NFS
398file system)
399which is now unavailable as referenced by the file descriptor.
400This may indicate the file was deleted on the
401.Tn NFS
402server or some
403other catastrophic event occurred.
404.It Er 72 EBADRPC Em "RPC struct is bad" .
405Exchange of
406.Tn RPC
407information was unsuccessful.
408.It Er 73 ERPCMISMATCH Em "RPC version wrong" .
409The version of
410.Tn RPC
411on the remote peer is not compatible with
412the local version.
413.It Er 74 EPROGUNAVAIL Em "RPC prog. not avail" .
414The requested program is not registered on the remote host.
415.It Er 75 EPROGMISMATCH Em "Program version wrong" .
416The requested version of the program is not available
417on the remote host
418.Pq Tn RPC .
419.It Er 76 EPROCUNAVAIL Em "Bad procedure for program" .
420An
421.Tn RPC
422call was attempted for a procedure which does not exist
423in the remote program.
424.It Er 77 ENOLCK Em "No locks available" .
425A system-imposed limit on the number of simultaneous file
426locks was reached.
427.It Er 78 ENOSYS Em "Function not implemented" .
428Attempted a system call that is not available on this
429system.
430.It Er 79 EFTYPE Em "Inappropriate file type or format" .
431The file was the wrong type for the operation, or a data file had
432the wrong format.
433.It Er 80 EAUTH Em "Authentication error" .
434Attempted to use an invalid authentication ticket to mount a
435.Tn NFS
436file system.
437.It Er 81 ENEEDAUTH Em "Need authenticator" .
438An authentication ticket must be obtained before the given
439.Tn NFS
440file system may be mounted.
441.It Er 82 EIDRM Em "Identifier removed" .
442An IPC identifier was removed while the current process was waiting on it.
443.It Er 83 ENOMSG Em "No message of desired type" .
444An IPC message queue does not contain a message of the desired type, or a
445message catalog does not contain the requested message.
446.It Er 84 EOVERFLOW Em "Value too large to be stored in data type" .
447A numerical result of the function was too large to be stored in the caller
448provided space.
449.It Er 85 ECANCELED Em "Operation canceled" .
450The scheduled operation was canceled.
451.It Er 86 EILSEQ Em "Illegal byte sequence" .
452While decoding a multibyte character the function came along an
453invalid or an incomplete sequence of bytes or the given wide
454character is invalid.
455.It Er 87 ENOATTR Em "Attribute not found" .
456The specified extended attribute does not exist.
457.It Er 88 EDOOFUS Em "Programming error" .
458A function or API is being abused in a way which could only be detected
459at run-time.
460.It Er 89 EBADMSG Em "Bad message" .
461A corrupted message was detected.
462.It Er 90 EMULTIHOP Em "Multihop attempted" .
463This error code is unused, but present for compatibility with other systems.
464.It Er 91 ENOLINK Em "Link has been severed" .
465This error code is unused, but present for compatibility with other systems.
466.It Er 92 EPROTO Em "Protocol error" .
467A device or socket encountered an unrecoverable protocol error.
468.It Er 93 ENOTCAPABLE Em "Capabilities insufficient" .
469An operation on a capability file descriptor requires greater privilege than
470the capability allows.
471.It Er 94 ECAPMODE Em "Not permitted in capability mode" .
472The system call or operation is not permitted for capability mode processes.
473.It Er 95 ENOTRECOVERABLE Em "State not recoverable" .
474The state protected by a robust mutex is not recoverable.
475.It Er 96 EOWNERDEAD Em "Previous owner died" .
476The owner of a robust mutex terminated while holding the mutex lock.
477.El
478.Sh DEFINITIONS
479.Bl -tag -width Ds
480.It Process ID .
481Each active process in the system is uniquely identified by a non-negative
482integer called a process ID.
483The range of this ID is from 0 to 99999.
484.It Parent process ID
485A new process is created by a currently active process (see
486.Xr fork 2 ) .
487The parent process ID of a process is initially the process ID of its creator.
488If the creating process exits,
489the parent process ID of each child is set to the ID of a system process,
490.Xr init 8 .
491.It Process Group
492Each active process is a member of a process group that is identified by
493a non-negative integer called the process group ID.
494This is the process
495ID of the group leader.
496This grouping permits the signaling of related
497processes (see
498.Xr termios 4 )
499and the job control mechanisms of
500.Xr csh 1 .
501.It Session
502A session is a set of one or more process groups.
503A session is created by a successful call to
504.Xr setsid 2 ,
505which causes the caller to become the only member of the only process
506group in the new session.
507.It Session leader
508A process that has created a new session by a successful call to
509.Xr setsid 2 ,
510is known as a session leader.
511Only a session leader may acquire a terminal as its controlling terminal (see
512.Xr termios 4 ) .
513.It Controlling process
514A session leader with a controlling terminal is a controlling process.
515.It Controlling terminal
516A terminal that is associated with a session is known as the controlling
517terminal for that session and its members.
518.It "Terminal Process Group ID"
519A terminal may be acquired by a session leader as its controlling terminal.
520Once a terminal is associated with a session, any of the process groups
521within the session may be placed into the foreground by setting
522the terminal process group ID to the ID of the process group.
523This facility is used
524to arbitrate between multiple jobs contending for the same terminal;
525(see
526.Xr csh 1
527and
528.Xr tty 4 ) .
529.It "Orphaned Process Group"
530A process group is considered to be
531.Em orphaned
532if it is not under the control of a job control shell.
533More precisely, a process group is orphaned
534when none of its members has a parent process that is in the same session
535as the group,
536but is in a different process group.
537Note that when a process exits, the parent process for its children
538is changed to be
539.Xr init 8 ,
540which is in a separate session.
541Not all members of an orphaned process group are necessarily orphaned
542processes (those whose creating process has exited).
543The process group of a session leader is orphaned by definition.
544.It "Real User ID and Real Group ID"
545Each user on the system is identified by a positive integer
546termed the real user ID.
547.Pp
548Each user is also a member of one or more groups.
549One of these groups is distinguished from others and
550used in implementing accounting facilities.
551The positive
552integer corresponding to this distinguished group is termed
553the real group ID.
554.Pp
555All processes have a real user ID and real group ID.
556These are initialized from the equivalent attributes
557of the process that created it.
558.It "Effective User Id, Effective Group Id, and Group Access List"
559Access to system resources is governed by two values:
560the effective user ID, and the group access list.
561The first member of the group access list is also known as the
562effective group ID.
563(In POSIX.1, the group access list is known as the set of supplementary
564group IDs, and it is unspecified whether the effective group ID is
565a member of the list.)
566.Pp
567The effective user ID and effective group ID are initially the
568process's real user ID and real group ID respectively.
569Either
570may be modified through execution of a set-user-ID or set-group-ID
571file (possibly by one its ancestors) (see
572.Xr execve 2 ) .
573By convention, the effective group ID (the first member of the group access
574list) is duplicated, so that the execution of a set-group-ID program
575does not result in the loss of the original (real) group ID.
576.Pp
577The group access list is a set of group IDs
578used only in determining resource accessibility.
579Access checks
580are performed as described below in ``File Access Permissions''.
581.It "Saved Set User ID and Saved Set Group ID"
582When a process executes a new file, the effective user ID is set
583to the owner of the file if the file is set-user-ID, and the effective
584group ID (first element of the group access list) is set to the group
585of the file if the file is set-group-ID.
586The effective user ID of the process is then recorded as the saved set-user-ID,
587and the effective group ID of the process is recorded as the saved set-group-ID.
588These values may be used to regain those values as the effective user
589or group ID after reverting to the real ID (see
590.Xr setuid 2 ) .
591(In POSIX.1, the saved set-user-ID and saved set-group-ID are optional,
592and are used in setuid and setgid, but this does not work as desired
593for the super-user.)
594.It Super-user
595A process is recognized as a
596.Em super-user
597process and is granted special privileges if its effective user ID is 0.
598.It Descriptor
599An integer assigned by the system when a file is referenced
600by
601.Xr open 2
602or
603.Xr dup 2 ,
604or when a socket is created by
605.Xr pipe 2 ,
606.Xr socket 2
607or
608.Xr socketpair 2 ,
609which uniquely identifies an access path to that file or socket from
610a given process or any of its children.
611.It File Name
612Names consisting of up to
613.Brq Dv NAME_MAX
614characters may be used to name
615an ordinary file, special file, or directory.
616.Pp
617These characters may be arbitrary eight-bit values,
618excluding
619.Dv NUL
620.Tn ( ASCII
6210) and the
622.Ql \&/
623character (slash,
624.Tn ASCII
62547).
626.Pp
627Note that it is generally unwise to use
628.Ql \&* ,
629.Ql \&? ,
630.Ql \&[
631or
632.Ql \&]
633as part of
634file names because of the special meaning attached to these characters
635by the shell.
636.It Path Name
637A path name is a
638.Dv NUL Ns -terminated
639character string starting with an
640optional slash
641.Ql \&/ ,
642followed by zero or more directory names separated
643by slashes, optionally followed by a file name.
644The total length of a path name must be less than
645.Brq Dv PATH_MAX
646characters.
647(On some systems, this limit may be infinite.)
648.Pp
649If a path name begins with a slash, the path search begins at the
650.Em root
651directory.
652Otherwise, the search begins from the current working directory.
653A slash by itself names the root directory.
654An empty
655pathname refers to the current directory.
656.It Directory
657A directory is a special type of file that contains entries
658that are references to other files.
659Directory entries are called links.
660By convention, a directory
661contains at least two links,
662.Ql .\&
663and
664.Ql \&.. ,
665referred to as
666.Em dot
667and
668.Em dot-dot
669respectively.
670Dot refers to the directory itself and
671dot-dot refers to its parent directory.
672.It "Root Directory and Current Working Directory"
673Each process has associated with it a concept of a root directory
674and a current working directory for the purpose of resolving path
675name searches.
676A process's root directory need not be the root
677directory of the root file system.
678.It File Access Permissions
679Every file in the file system has a set of access permissions.
680These permissions are used in determining whether a process
681may perform a requested operation on the file (such as opening
682a file for writing).
683Access permissions are established at the
684time a file is created.
685They may be changed at some later time
686through the
687.Xr chmod 2
688call.
689.Pp
690File access is broken down according to whether a file may be: read,
691written, or executed.
692Directory files use the execute
693permission to control if the directory may be searched.
694.Pp
695File access permissions are interpreted by the system as
696they apply to three different classes of users: the owner
697of the file, those users in the file's group, anyone else.
698Every file has an independent set of access permissions for
699each of these classes.
700When an access check is made, the system
701decides if permission should be granted by checking the access
702information applicable to the caller.
703.Pp
704Read, write, and execute/search permissions on
705a file are granted to a process if:
706.Pp
707The process's effective user ID is that of the super-user.
708(Note:
709even the super-user cannot execute a non-executable file.)
710.Pp
711The process's effective user ID matches the user ID of the owner
712of the file and the owner permissions allow the access.
713.Pp
714The process's effective user ID does not match the user ID of the
715owner of the file, and either the process's effective
716group ID matches the group ID
717of the file, or the group ID of the file is in
718the process's group access list,
719and the group permissions allow the access.
720.Pp
721Neither the effective user ID nor effective group ID
722and group access list of the process
723match the corresponding user ID and group ID of the file,
724but the permissions for ``other users'' allow access.
725.Pp
726Otherwise, permission is denied.
727.It Sockets and Address Families
728A socket is an endpoint for communication between processes.
729Each socket has queues for sending and receiving data.
730.Pp
731Sockets are typed according to their communications properties.
732These properties include whether messages sent and received
733at a socket require the name of the partner, whether communication
734is reliable, the format used in naming message recipients, etc.
735.Pp
736Each instance of the system supports some
737collection of socket types; consult
738.Xr socket 2
739for more information about the types available and
740their properties.
741.Pp
742Each instance of the system supports some number of sets of
743communications protocols.
744Each protocol set supports addresses
745of a certain format.
746An Address Family is the set of addresses
747for a specific group of protocols.
748Each socket has an address
749chosen from the address family in which the socket was created.
750.El
751.Sh SEE ALSO
752.Xr intro 3 ,
753.Xr perror 3