| 1 | .\" Copyright (c) 1980,1983,1986 Regents of the University of California. |
| 2 | .\" All rights reserved. The Berkeley software License Agreement |
| 3 | .\" specifies the terms and conditions for redistribution. |
| 4 | .\" |
| 5 | .\" @(#)intro.2 6.10 (Berkeley) %G% |
| 6 | .\" |
| 7 | .TH INTRO 2 "" |
| 8 | .UC 4 |
| 9 | .de en |
| 10 | .HP |
| 11 | \\$1 \\$2 \\$3 |
| 12 | .br |
| 13 | .. |
| 14 | .SH NAME |
| 15 | intro \- introduction to system calls and error numbers |
| 16 | .SH SYNOPSIS |
| 17 | .B #include <sys/errno.h> |
| 18 | .SH DESCRIPTION |
| 19 | This section provides an overview of the system calls, |
| 20 | their error returns, and other common definitions and concepts. |
| 21 | .\".LP |
| 22 | .\".B "System call restart" |
| 23 | .\".PP |
| 24 | .\"<more later...> |
| 25 | .SH DIAGNOSTICS |
| 26 | Most of these calls have one or more error returns. |
| 27 | An error condition is indicated by an otherwise impossible return |
| 28 | value. This is almost always \-1; the individual descriptions |
| 29 | specify the details. |
| 30 | Note that a number of system calls overload the meanings of these |
| 31 | error numbers, and that the meanings must be interpreted according |
| 32 | to the type and circumstances of the call. |
| 33 | .PP |
| 34 | As with normal arguments, all return codes and values from |
| 35 | functions are of type integer unless otherwise noted. |
| 36 | An error number is also made available in the external |
| 37 | variable \fIerrno\fP, which is not cleared |
| 38 | on successful calls. |
| 39 | Thus \fIerrno\fP should be tested only after an error has occurred. |
| 40 | .PP |
| 41 | The following is a complete list of the errors and their |
| 42 | names as given in |
| 43 | .RI < sys/errno.h >. |
| 44 | .en 0 \h'\w'EIO'u' "Error 0 |
| 45 | Unused. |
| 46 | .en 1 EPERM "Operation not permitted |
| 47 | Typically this error indicates |
| 48 | an attempt to modify a file in some way forbidden |
| 49 | except to its owner or super-user. |
| 50 | It is also returned for attempts |
| 51 | by ordinary users to do things |
| 52 | allowed only to the super-user. |
| 53 | .en 2 ENOENT "No such file or directory |
| 54 | This error occurs when a file name is specified |
| 55 | and the file should exist but doesn't, or when one |
| 56 | of the directories in a path name does not exist. |
| 57 | .en 3 ESRCH "No such process |
| 58 | The process or process group whose number was given |
| 59 | does not exist, or any such process is already dead. |
| 60 | .en 4 EINTR "Interrupted system call |
| 61 | An asynchronous signal (such as interrupt or quit) |
| 62 | that the user has elected to catch |
| 63 | occurred during a system call. |
| 64 | If execution is resumed |
| 65 | after processing the signal |
| 66 | and the system call is not restarted, |
| 67 | it will appear as if the interrupted system call |
| 68 | returned this error condition. |
| 69 | .en 5 EIO "Input/output error |
| 70 | Some physical I/O error occurred during a |
| 71 | .I read |
| 72 | or |
| 73 | .IR write . |
| 74 | This error may in some cases occur |
| 75 | on a call following the one to which it actually applies. |
| 76 | .en 6 ENXIO "Device not configured |
| 77 | I/O on a special file refers to a subdevice that does not |
| 78 | exist, |
| 79 | or beyond the limits of the device. |
| 80 | It may also occur when, for example, an illegal tape drive |
| 81 | unit number is selected |
| 82 | or a disk pack is not loaded on a drive. |
| 83 | .en 7 E2BIG "Argument list too long |
| 84 | An argument list longer than 20480 bytes (or the current limit, NCARGS in |
| 85 | .IR <sys/param.h> ) |
| 86 | is presented to |
| 87 | .IR execve . |
| 88 | .en 8 ENOEXEC "Exec format error |
| 89 | A request is made to execute a file |
| 90 | that, although it has the appropriate permissions, |
| 91 | does not start with a valid magic number, (see |
| 92 | .IR a.out (5)). |
| 93 | .en 9 EBADF "Bad file descriptor |
| 94 | Either a file descriptor refers to no |
| 95 | open file, |
| 96 | or a read (resp. write) request is made to |
| 97 | a file that is open only for writing (resp. reading). |
| 98 | .en 10 ECHILD "No child processes |
| 99 | .I Wait |
| 100 | and the process has no |
| 101 | living or unwaited-for children. |
| 102 | .en 11 EDEADLK "Resource deadlock avoided |
| 103 | An attempt was made to lock a system resource that |
| 104 | would have resulted in a deadlock situation. |
| 105 | .en 12 ENOMEM "Cannnot allocate memory |
| 106 | During an |
| 107 | .I execve |
| 108 | or |
| 109 | .I break, |
| 110 | a program asks for more core or swap space than the system is |
| 111 | able to supply, |
| 112 | or a process size limit would be exceeded. |
| 113 | A lack of swap space is normally a temporary condition; however, |
| 114 | a lack of core |
| 115 | is not a temporary condition; the maximum size |
| 116 | of the text, data, and stack segments is a system parameter. |
| 117 | Soft limits may be increased to their corresponding hard limits. |
| 118 | .en 13 EACCES "Permission denied |
| 119 | An attempt was made to access a file in a way forbidden |
| 120 | by the protection system. |
| 121 | .en 14 EFAULT "Bad address |
| 122 | The system encountered a hardware fault in attempting to |
| 123 | access the arguments of a system call. |
| 124 | .en 15 ENOTBLK "Block device required |
| 125 | A plain file was mentioned where a block device was required, |
| 126 | e.g., in |
| 127 | .IR mount . |
| 128 | .en 16 EBUSY "Device busy |
| 129 | An attempt to mount a device that was already mounted or |
| 130 | an attempt was made to dismount a device |
| 131 | on which there is an active file |
| 132 | (open file, current directory, mounted-on file, or active text segment). |
| 133 | A request was made to an exclusive access device that was already in use. |
| 134 | .en 17 EEXIST "File exists |
| 135 | An existing file was mentioned in an inappropriate context, |
| 136 | e.g., |
| 137 | .IR link . |
| 138 | .en 18 EXDEV "Cross-device link |
| 139 | A hard link to a file on another device |
| 140 | was attempted. |
| 141 | .en 19 ENODEV "Operation not supported by device |
| 142 | An attempt was made to apply an inappropriate |
| 143 | system call to a device, |
| 144 | e.g., to read a write-only device, |
| 145 | or the device is not configured by the system. |
| 146 | .en 20 ENOTDIR "Not a directory |
| 147 | A non-directory was specified where a directory |
| 148 | is required, |
| 149 | for example, in a path name or |
| 150 | as an argument to |
| 151 | .IR chdir . |
| 152 | .en 21 EISDIR "Is a directory |
| 153 | An attempt to write on a directory. |
| 154 | .en 22 EINVAL "Invalid argument |
| 155 | Some invalid argument: |
| 156 | dismounting a non-mounted |
| 157 | device, |
| 158 | mentioning an unknown signal in |
| 159 | .I signal, |
| 160 | or some other argument inappropriate for the call. |
| 161 | Also set by math functions, (see |
| 162 | .IR math (3)). |
| 163 | .en 23 ENFILE "Too many open files in system |
| 164 | The system's table of open files is full, |
| 165 | and temporarily no more |
| 166 | .I opens |
| 167 | can be accepted. |
| 168 | .en 24 EMFILE "Too many open files |
| 169 | As released, the limit on the number of |
| 170 | open files per process is 64. |
| 171 | .IR Getdtablesize (2) |
| 172 | will obtain the current limit. |
| 173 | Customary configuration limit on most other UNIX systems |
| 174 | is 20 per process. |
| 175 | .en 25 ENOTTY "Inappropriate ioctl for device |
| 176 | The file mentioned in an |
| 177 | .I ioctl |
| 178 | is not a terminal or one of the |
| 179 | devices to which this call applies. |
| 180 | .en 26 ETXTBSY "Text file busy |
| 181 | An attempt to execute a pure-procedure |
| 182 | program that is currently open for writing. |
| 183 | Also an attempt to open for writing a pure-procedure |
| 184 | program that is being executed. |
| 185 | .en 27 EFBIG "File too large |
| 186 | The size of a file exceeded the maximum (about |
| 187 | .if t 2\u\s-231\s+2\d |
| 188 | .if n 2.1E9 |
| 189 | bytes). |
| 190 | .en 28 ENOSPC "No space left on device |
| 191 | A |
| 192 | .I write |
| 193 | to an ordinary file, the creation of a |
| 194 | directory or symbolic link, or the creation of a directory |
| 195 | entry failed because no more disk blocks are available |
| 196 | on the file system, or the allocation of an inode for a newly |
| 197 | created file failed because no more inodes are available |
| 198 | on the file system. |
| 199 | .en 29 ESPIPE "Illegal seek |
| 200 | An |
| 201 | .I lseek |
| 202 | was issued to a socket or pipe. |
| 203 | This error may also be issued for |
| 204 | other non-seekable devices. |
| 205 | .en 30 EROFS "Read-only file system |
| 206 | An attempt to modify a file or directory |
| 207 | was made |
| 208 | on a device mounted read-only. |
| 209 | .en 31 EMLINK "Too many links |
| 210 | An attempt to make more than 32767 hard links to a file. |
| 211 | .en 32 EPIPE "Broken pipe |
| 212 | A write on a pipe or socket for which there is no process |
| 213 | to read the data. |
| 214 | This condition normally generates a signal; |
| 215 | the error is returned if the signal is caught or ignored. |
| 216 | .en 33 EDOM "Numerical argument out of domain |
| 217 | The argument of a function in the math package (3M) |
| 218 | is out of the domain of the function. |
| 219 | .en 34 ERANGE "Numerical result out of range |
| 220 | The value of a function in the math package (3M) |
| 221 | is unrepresentable within machine precision. |
| 222 | .en 35 EAGAIN "Resource temporarily unavailable |
| 223 | This is a temporary condition and later calls to the |
| 224 | same routine may complete normally. |
| 225 | .en 36 EINPROGRESS "Operation now in progress" |
| 226 | An operation that takes a long time to complete (such as |
| 227 | a \fIconnect\fP(2)) was attempted on a non-blocking object (see |
| 228 | \fIfcntl\fP(2)). |
| 229 | .en 37 EALREADY "Operation already in progress" |
| 230 | An operation was attempted on a non-blocking object that already |
| 231 | had an operation in progress. |
| 232 | .en 38 ENOTSOCK "Socket operation on non-socket" |
| 233 | Self-explanatory. |
| 234 | .en 39 EDESTADDRREQ "Destination address required" |
| 235 | A required address was omitted from an operation on a socket. |
| 236 | .en 40 EMSGSIZE "Message too long" |
| 237 | A message sent on a socket was larger than the internal message buffer |
| 238 | or some other network limit. |
| 239 | .en 41 EPROTOTYPE "Protocol wrong type for socket" |
| 240 | A protocol was specified that does not support the semantics of the |
| 241 | socket type requested. For example, you cannot use the ARPA Internet |
| 242 | UDP protocol with type SOCK_STREAM. |
| 243 | .en 42 ENOPROTOOPT "Protocol not available |
| 244 | A bad option or level was specified in a |
| 245 | .IR getsockopt (2) |
| 246 | or |
| 247 | .IR setsockopt (2) |
| 248 | call. |
| 249 | .en 43 EPROTONOSUPPORT "Protocol not supported" |
| 250 | The protocol has not been configured into the |
| 251 | system or no implementation for it exists. |
| 252 | .en 44 ESOCKTNOSUPPORT "Socket type not supported" |
| 253 | The support for the socket type has not been configured into the |
| 254 | system or no implementation for it exists. |
| 255 | .en 45 EOPNOTSUPP "Operation not supported on socket" |
| 256 | For example, trying to \fIaccept\fP a connection on a datagram socket. |
| 257 | .en 46 EPFNOSUPPORT "Protocol family not supported" |
| 258 | The protocol family has not been configured into the |
| 259 | system or no implementation for it exists. |
| 260 | .en 47 EAFNOSUPPORT "Address family not supported by protocol family" |
| 261 | An address incompatible with the requested protocol was used. |
| 262 | For example, you shouldn't necessarily expect to be able to use NS |
| 263 | addresses with ARPA Internet protocols. |
| 264 | .en 48 EADDRINUSE "Address already in use" |
| 265 | Only one usage of each address is normally permitted. |
| 266 | .en 49 EADDRNOTAVAIL "Can't assign requested address" |
| 267 | Normally results from an attempt to create a socket with an |
| 268 | address not on this machine. |
| 269 | .en 50 ENETDOWN "Network is down" |
| 270 | A socket operation encountered a dead network. |
| 271 | .en 51 ENETUNREACH "Network is unreachable" |
| 272 | A socket operation was attempted to an unreachable network. |
| 273 | .en 52 ENETRESET "Network dropped connection on reset" |
| 274 | The host you were connected to crashed and rebooted. |
| 275 | .en 53 ECONNABORTED "Software caused connection abort" |
| 276 | A connection abort was caused internal to your host machine. |
| 277 | .en 54 ECONNRESET "Connection reset by peer" |
| 278 | A connection was forcibly closed by a peer. This normally |
| 279 | results from a loss of the connection on the remote socket |
| 280 | due to a timeout or a reboot. |
| 281 | .en 55 ENOBUFS "No buffer space available" |
| 282 | An operation on a socket or pipe was not performed because |
| 283 | the system lacked sufficient buffer space or because a queue was full. |
| 284 | .en 56 EISCONN "Socket is already connected" |
| 285 | A |
| 286 | .I connect |
| 287 | request was made on an already connected socket; or, |
| 288 | a |
| 289 | .I sendto |
| 290 | or |
| 291 | .I sendmsg |
| 292 | request on a connected socket specified a destination |
| 293 | when already connected. |
| 294 | .en 57 ENOTCONN "Socket is not connected" |
| 295 | An request to send or receive data was disallowed because |
| 296 | the socket is not connected and (when sending on a datagram socket) |
| 297 | no address was supplied. |
| 298 | .en 58 ESHUTDOWN "Can't send after socket shutdown" |
| 299 | A request to send data was disallowed because the socket |
| 300 | had already been shut down with a previous |
| 301 | .IR shutdown (2) |
| 302 | call. |
| 303 | .en 60 ETIMEDOUT "Connection timed out" |
| 304 | A |
| 305 | .I connect |
| 306 | or |
| 307 | .I send |
| 308 | request failed because the connected party did not |
| 309 | properly respond after a period of time. (The timeout |
| 310 | period is dependent on the communication protocol.) |
| 311 | .en 61 ECONNREFUSED "Connection refused" |
| 312 | No connection could be made because the target machine actively |
| 313 | refused it. This usually results from trying to connect |
| 314 | to a service that is inactive on the foreign host. |
| 315 | .en 62 ELOOP "Too many levels of symbolic links" |
| 316 | A path name lookup involved more than 8 symbolic links. |
| 317 | .en 63 ENAMETOOLONG "File name too long" |
| 318 | A component of a path name exceeded 255 (MAXNAMELEN) characters, or an entire |
| 319 | path name exceeded 1023 (MAXPATHLEN-1) characters. |
| 320 | .en 64 EHOSTDOWN "Host is down" |
| 321 | A socket operation failed because the destination host was down. |
| 322 | .en 65 EHOSTUNREACH "No route to host" |
| 323 | A socket operation was attempted to an unreachable host. |
| 324 | .en 66 ENOTEMPTY "Directory not empty" |
| 325 | A directory with entries other than \*(lq.\*(rq and \*(lq..\*(rq |
| 326 | was supplied to a remove directory or rename call. |
| 327 | .en 67 EPROCLIM "Too many processes" |
| 328 | .en 68 EUSERS "Too many users" |
| 329 | The quota system ran out of table entries. |
| 330 | .en 69 EDQUOT "Disc quota exceeded" |
| 331 | A |
| 332 | .I write |
| 333 | to an ordinary file, the creation of a |
| 334 | directory or symbolic link, or the creation of a directory |
| 335 | entry failed because the user's quota of disk blocks was |
| 336 | exhausted, or the allocation of an inode for a newly |
| 337 | created file failed because the user's quota of inodes |
| 338 | was exhausted. |
| 339 | .en 70 ESTALE "Stale NFS file handle" |
| 340 | An attempt was made to access an open file (on an NFS filesystem) |
| 341 | which is now unavailable as referenced by the file descriptor. |
| 342 | This may indicate the file was deleted on the NFS server and some |
| 343 | other catastrophic event occured. |
| 344 | .en 72 EBADRPC "RPC struct is bad" |
| 345 | Exchange of RPC information was unsuccessful. |
| 346 | .en 73 ERPCMISMATCH "RPC version wrong" |
| 347 | The version of RPC on the remote peer is not compatible with |
| 348 | the local version. |
| 349 | .en 74 EPROGUNAVAIL "RPC prog. not avail" |
| 350 | The requested program is not registered on the remote host. |
| 351 | .en 75 EPROGMISMATCH "Program version wrong" |
| 352 | The requested version of the program is not available |
| 353 | on the remote host (RPC). |
| 354 | .en 76 EPROCUNAVAIL "Bad procedure for program" |
| 355 | An RPC call was attempted for a procedure which doesn't exist |
| 356 | in the remote program. |
| 357 | .en 77 ENOLCK "No locks available" |
| 358 | A system-imposed limit on the number of simultaneous file |
| 359 | locks was reached. |
| 360 | .en 78 ENOSYS "Function not implemented" |
| 361 | Attempted a system call that is not available on this |
| 362 | system. |
| 363 | .SH DEFINITIONS |
| 364 | .TP 5 |
| 365 | Process ID |
| 366 | .br |
| 367 | Each active process in the system is uniquely identified by a positive |
| 368 | integer called a process ID. The range of this ID is from 0 to 30000. |
| 369 | .TP 5 |
| 370 | Parent process ID |
| 371 | .br |
| 372 | A new process is created by a currently active process; (see |
| 373 | .IR fork (2)). |
| 374 | The parent process ID of a process is the process ID of its creator. |
| 375 | .TP 5 |
| 376 | Process Group ID |
| 377 | .br |
| 378 | Each active process is a member of a process group that is identified by |
| 379 | a positive integer called the process group ID. This is the process |
| 380 | ID of the group leader. This grouping permits the signaling of related |
| 381 | processes (see |
| 382 | .IR killpg (2)) |
| 383 | and the job control mechanisms of |
| 384 | .IR csh (1). |
| 385 | .TP 5 |
| 386 | Tty Group ID |
| 387 | .br |
| 388 | Each active process can be a member of a terminal group that is identified |
| 389 | by a positive integer called the tty group ID. This grouping is used |
| 390 | to arbitrate between multiple jobs contending for the same terminal; |
| 391 | (see |
| 392 | .IR csh (1) |
| 393 | and |
| 394 | .IR tty (4)). |
| 395 | .TP 5 |
| 396 | Real User ID and Real Group ID |
| 397 | .br |
| 398 | Each user on the system is identified by a positive integer |
| 399 | termed the real user ID. |
| 400 | .IP |
| 401 | Each user is also a member of one or more groups. |
| 402 | One of these groups is distinguished from others and |
| 403 | used in implementing accounting facilities. The positive |
| 404 | integer corresponding to this distinguished group is termed |
| 405 | the real group ID. |
| 406 | .IP |
| 407 | All processes have a real user ID and real group ID. |
| 408 | These are initialized from the equivalent attributes |
| 409 | of the process that created it. |
| 410 | .TP 5 |
| 411 | Effective User Id, Effective Group Id, and Access Groups |
| 412 | .br |
| 413 | Access to system resources is governed by three values: |
| 414 | the effective user ID, the effective group ID, and the |
| 415 | group access list. |
| 416 | .IP |
| 417 | The effective user ID and effective group ID are initially the |
| 418 | process's real user ID and real group ID respectively. Either |
| 419 | may be modified through execution of a set-user-ID or set-group-ID |
| 420 | file (possibly by one its ancestors) (see |
| 421 | .IR execve (2)). |
| 422 | .IP |
| 423 | The group access list is an additional set of group ID's |
| 424 | used only in determining resource accessibility. Access checks |
| 425 | are performed as described below in ``File Access Permissions''. |
| 426 | .TP 5 |
| 427 | Super-user |
| 428 | .br |
| 429 | A process is recognized as a |
| 430 | .I super-user |
| 431 | process and is granted special privileges if its effective user ID is 0. |
| 432 | .TP 5 |
| 433 | Special Processes |
| 434 | .br |
| 435 | The processes with a process ID's of 0, 1, and 2 are special. |
| 436 | Process 0 is the scheduler. Process 1 is the initialization process |
| 437 | .IR init , |
| 438 | and is the ancestor of every other process in the system. |
| 439 | It is used to control the process structure. |
| 440 | Process 2 is the paging daemon. |
| 441 | .TP 5 |
| 442 | Descriptor |
| 443 | .br |
| 444 | An integer assigned by the system when a file is referenced |
| 445 | by |
| 446 | .IR open (2) |
| 447 | or |
| 448 | .IR dup (2), |
| 449 | or when a socket is created by |
| 450 | .IR pipe (2), |
| 451 | .IR socket (2) |
| 452 | or |
| 453 | .IR socketpair (2), |
| 454 | which uniquely identifies an access path to that file or socket from |
| 455 | a given process or any of its children. |
| 456 | .TP 5 |
| 457 | File Name |
| 458 | .br |
| 459 | Names consisting of up to 255 (MAXNAMELEN) characters may be used to name |
| 460 | an ordinary file, special file, or directory. |
| 461 | .IP |
| 462 | These characters may be selected from the set of all ASCII character |
| 463 | excluding 0 (null) and the ASCII code for / (slash). (The parity bit, |
| 464 | bit 8, must be 0.) |
| 465 | .IP |
| 466 | Note that it is generally unwise to use *, ?, [ or ] as part of |
| 467 | file names because of the special meaning attached to these characters |
| 468 | by the shell. |
| 469 | .TP 5 |
| 470 | Path Name |
| 471 | .br |
| 472 | A path name is a null-terminated character string starting with an |
| 473 | optional slash (/), followed by zero or more directory names separated |
| 474 | by slashes, optionally followed by a file name. |
| 475 | The total length of a path name must be less than 1024 (MAXPATHLEN) characters. |
| 476 | .IP |
| 477 | If a path name begins with a slash, the path search begins at the |
| 478 | .I root |
| 479 | directory. |
| 480 | Otherwise, the search begins from the current working directory. |
| 481 | A slash by itself names the root directory. A null |
| 482 | pathname refers to the current directory. |
| 483 | .TP 5 |
| 484 | Directory |
| 485 | .br |
| 486 | A directory is a special type of file that contains entries |
| 487 | that are references to other files. |
| 488 | Directory entries are called links. By convention, a directory |
| 489 | contains at least two links, . and .., referred to as |
| 490 | .I dot |
| 491 | and |
| 492 | .I dot-dot |
| 493 | respectively. Dot refers to the directory itself and |
| 494 | dot-dot refers to its parent directory. |
| 495 | .TP 5 |
| 496 | Root Directory and Current Working Directory |
| 497 | .br |
| 498 | Each process has associated with it a concept of a root directory |
| 499 | and a current working directory for the purpose of resolving path |
| 500 | name searches. A process's root directory need not be the root |
| 501 | directory of the root file system. |
| 502 | .TP 5 |
| 503 | File Access Permissions |
| 504 | .br |
| 505 | Every file in the file system has a set of access permissions. |
| 506 | These permissions are used in determining whether a process |
| 507 | may perform a requested operation on the file (such as opening |
| 508 | a file for writing). Access permissions are established at the |
| 509 | time a file is created. They may be changed at some later time |
| 510 | through the |
| 511 | .IR chmod (2) |
| 512 | call. |
| 513 | .IP |
| 514 | File access is broken down according to whether a file may be: read, |
| 515 | written, or executed. Directory files use the execute |
| 516 | permission to control if the directory may be searched. |
| 517 | .IP |
| 518 | File access permissions are interpreted by the system as |
| 519 | they apply to three different classes of users: the owner |
| 520 | of the file, those users in the file's group, anyone else. |
| 521 | Every file has an independent set of access permissions for |
| 522 | each of these classes. When an access check is made, the system |
| 523 | decides if permission should be granted by checking the access |
| 524 | information applicable to the caller. |
| 525 | .IP |
| 526 | Read, write, and execute/search permissions on |
| 527 | a file are granted to a process if: |
| 528 | .IP |
| 529 | The process's effective user ID is that of the super-user. |
| 530 | .IP |
| 531 | The process's effective user ID matches the user ID of the owner |
| 532 | of the file and the owner permissions allow the access. |
| 533 | .IP |
| 534 | The process's effective user ID does not match the user ID of the |
| 535 | owner of the file, and either the process's effective |
| 536 | group ID matches the group ID |
| 537 | of the file, or the group ID of the file is in |
| 538 | the process's group access list, |
| 539 | and the group permissions allow the access. |
| 540 | .IP |
| 541 | Neither the effective user ID nor effective group ID |
| 542 | and group access list of the process |
| 543 | match the corresponding user ID and group ID of the file, |
| 544 | but the permissions for ``other users'' allow access. |
| 545 | .IP |
| 546 | Otherwise, permission is denied. |
| 547 | .TP 5 |
| 548 | Sockets and Address Families |
| 549 | .IP |
| 550 | A socket is an endpoint for communication between processes. |
| 551 | Each socket has queues for sending and receiving data. |
| 552 | .IP |
| 553 | Sockets are typed according to their communications properties. |
| 554 | These properties include whether messages sent and received |
| 555 | at a socket require the name of the partner, whether communication |
| 556 | is reliable, the format used in naming message recipients, etc. |
| 557 | .IP |
| 558 | Each instance of the system supports some |
| 559 | collection of socket types; consult |
| 560 | .IR socket (2) |
| 561 | for more information about the types available and |
| 562 | their properties. |
| 563 | .IP |
| 564 | Each instance of the system supports some number of sets of |
| 565 | communications protocols. Each protocol set supports addresses |
| 566 | of a certain format. An Address Family is the set of addresses |
| 567 | for a specific group of protocols. Each socket has an address |
| 568 | chosen from the address family in which the socket was created. |
| 569 | .SH SEE ALSO |
| 570 | intro(3), perror(3) |