Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(3)

perror(3)

INTRO(2)                             BSD                              INTRO(2)



NAME
     intro - introduction to system calls and error numbers

SYNOPSIS
     #include <sys/errno.h>

DESCRIPTION
     This section describes all of the system calls.  Domain(R)/OS BSD
     implements these calls by way of the global library /lib/clib.

     Most of these calls have one or more error returns.  An error condition
     is indicated by an otherwise impossible return value.  This is almost
     always -1; the individual descriptions specify the details.  Note that a
     number of system calls overload the meanings of these error numbers, and
     that the meanings must be interpreted according to the type and
     circumstances of the call.

     As with normal arguments, all return codes and values from functions are
     of type integer unless otherwise noted.  An error number is also made
     available in the external variable errno, which is not cleared on
     successful calls.  Thus, errno should be tested only after an error has
     occurred.

     The following is a complete list of the errors and their names as given
     in <sys/errno.h>:

     0       Error 0
          Unused.

     Kernel Errors

     1  EPERM  Not owner
          Typically this error indicates an attempt to modify a file in some
          way forbidden except to its owner or super-user.  It is also
          returned for attempts by ordinary users to do things allowed only to
          the super-user.

     2  ENOENT  No such file or directory
          This error occurs when a filename is specified and the file should
          exist but doesn't, or when one of the directories in a pathname does
          not exist.

     3  ESRCH  No such process
          The process or process group whose number was given does not exist,
          or any such process is already dead.

     4  EINTR  Interrupted system call
          An asynchronous signal (such as interrupt or quit) that the user has
          elected to catch occurred during a system call.  If execution is
          resumed after processing the signal and the system call is not
          restarted, it will appear as if the interrupted system call returned
          this error condition.

     5  EIO  I/O error
          Some physical I/O error occurred during a read or write.  This error
          may in some cases occur on a call following the one to which it
          actually applies.

     6  ENXIO  No such device or address
          I/O on a special file refers to a subdevice that does not exist, or
          beyond the limits of the device.  It may also occur when, for
          example, an illegal tape drive unit number is selected or a disk
          pack is not loaded on a drive.

     7  E2BIG  Arg list too long
          An argument list longer than 10240 bytes (or the current limit,
          NCARGS in <sys/param.h>) is presented to execve.

     8  ENOEXEC  Exec format error
          A request is made to execute a file that, although it has the
          appropriate permissions, does not start with a valid magic number
          (see a.out(5)).

     9  EBADF  Bad file number
          Either a file descriptor refers to no open file, or a read (write)
          request is made to a file that is open only for writing (reading).

     10  ECHILD  No children
          wait and the process has no living or unwaited-for children.

     11  EAGAIN  No more processes
          In a fork, the system's process table is full or the user is not
          allowed to create any more processes.

     12  ENOMEM  Not enough memory
          During an execve or break, a program asks for more memory or backing
          storage than the system is able to supply, or a process size limit
          would be exceeded.  A lack of backing storage is normally a
          temporary condition; however, a lack of core is not a temporary
          condition; the maximum size of the text, data, and stack segments is
          a system parameter.  Soft limits can be increased to their
          corresponding hard limits.

     13  EACCES  Permission denied
          An attempt was made to access a file in a way forbidden by the
          protection system.

     14  EFAULT  Bad address
          The system encountered a hardware fault in attempting to access the
          arguments of a system call.

     15  ENOTBLK  Block device required
          A plain file was mentioned where a block device was required, for
          example, in mount.

     16  EBUSY  Device busy
          An attempt to mount a device that was already mounted, or an attempt
          was made to dismount a device on which there is an active file (open
          file, current directory, mounted-on file, or active text segment).
          A request was made to an exclusive access device that was already in
          use.

     17  EEXIST  File exists
          An existing file was mentioned in an inappropriate context, for
          example, link.

     18  EXDEV  Cross-device link
          A hard link to a file on another device was attempted.

     19  ENODEV  No such device
          An attempt was made to apply an inappropriate system call to a
          device (for example, to read a write-only device), or the device is
          not configured by the system.

     20  ENOTDIR  Not a directory
          A non-directory was specified where a directory is required, for
          example, in a pathname or as an argument to chdir.
     21  EISDIR  Is a directory
          An attempt to write on a directory.

     22  EINVAL  Invalid argument
          Some invalid argument:  dismounting a non-mounted device, mentioning
          an unknown signal in signal, or some other argument inappropriate
          for the call.  Also set by math functions, (see math(3M)).

     23  ENFILE  File table overflow
          The system's table of open files is full, and temporarily no more
          opens can be accepted.

     24  EMFILE  Too many open files
          As released, the limit on the number of open files per process is
          128.  getdtablesize(2) will obtain the current limit.  Customary
          configuration limit on most other UNIX* systems is 20 per process.

     25  ENOTTY  Inappropriate ioctl for device
          The file mentioned in an ioctl is not a terminal or one of the
          devices to which this call applies.

     26  ETXTBSY  Text file busy
          An attempt to execute a pure-procedure program that is currently
          open for writing.  Also an attempt to open for writing a pure-
          procedure program that is being executed.

     27  EFBIG  File too large
          The size of a file exceeded the maximum (about 2**32 bytes).

     28  ENOSPC  No space left on device
          A write to an ordinary file, the creation of a directory or symbolic
          link, or the creation of a directory entry failed because no more
          disk blocks are available on the file system, or the allocation of
          an inode for a newly created file failed because no more inodes are
          available on the file system.

     29  ESPIPE  Illegal seek
          An lseek was issued to a socket or pipe.  This error may also be
          issued for other non-seekable devices.

     30  EROFS  Read-only file system
          An attempt to modify a file or directory was made on a device
          mounted read-only.

     31  EMLINK  Too many links
          An attempt to make more than 32767 hard links to a file.

     32  EPIPE  Broken pipe
          A write on a pipe or socket for which there is no process to read
          the data.  This condition normally generates a signal; the error is
          returned if the signal is caught or ignored.

     Math Software

     33  EDOM  Argument too large
          The argument of a function in the math package (3M) is out of the
          domain of the function.

     34  ERANGE  Result too large
          The value of a function in the math package (3M) is unrepresentable
          within machine precision.

     Non-Blocking and Interrupt I/O

     35  EWOULDBLOCK  Operation would block
          An operation that would cause a process to block was attempted on an
          object in non-blocking mode (see fcntl(2)).

     35  EDEADLK  Operation would deadlock
          An operation that would cause a process to deadlock was attempted on
          an object in non-blocking mode (see fcntl(2)).

     36  EINPROGRESS  Operation now in progress
          An operation that takes a long time to complete (such as a
          connect(2)) was attempted on a non-blocking object (see fcntl(2)).

     37  EALREADY  Operation already in progress
          An operation was attempted on a non-blocking object that already had
          an operation in progress.

     IPC/Network Software

     38  ENOTSOCK  Socket operation on non-socket

     39  EDESTADDRREQ  Destination address required
          A required address was omitted from an operation on a socket.

     40  EMSGSIZE  Message too long
          A message sent on a socket was larger than the internal message
          buffer or some other network limit.

     41  EPROTOTYPE  Protocol wrong type for socket
          A protocol was specified that does not support the semantics of the
          socket type requested. For example, you cannot use the ARPA Internet
          UDP protocol with type SOCK_STREAM.

     42  ENOPROTOOPT  Option not supported by protocol
          A bad option or level was specified in a getsockopt(2) or
          setsockopt(2) call.

     43  EPROTONOSUPPORT  Protocol not supported
          The protocol has not been configured into the system or no
          implementation for it exists.

     44  ESOCKTNOSUPPORT  Socket type not supported
          The support for the socket type has not been configured into the
          system or no implementation for it exists.

     45  EOPNOTSUPP  Operation not supported on socket
          For example, trying to accept a connection on a datagram socket.

     46  EPFNOSUPPORT  Protocol family not supported
          The protocol family has not been configured into the system or no
          implementation for it exists.

     47  EAFNOSUPPORT  Address family not supported by protocol family
          An address incompatible with the requested protocol was used.  For
          example, you shouldn't necessarily expect to be able to use NS
          addresses with ARPA Internet protocols.

     48  EADDRINUSE  Address already in use
          Only one usage of each address is normally permitted.

     49  EADDRNOTAVAIL  Can't assign requested address
          Normally results from an attempt to create a socket with an address
          not on this machine.

     50  ENETDOWN  Network is down
          A socket operation encountered a dead network.

     51  ENETUNREACH  Network is unreachable
          A socket operation was attempted to an unreachable network.

     52  ENETRESET  Network dropped connection on reset
          The host you were connected to crashed and rebooted.

     53  ECONNABORTED  Software caused connection abort
          A connection abort was caused internally to your host machine.

     54  ECONNRESET  Connection reset by peer
          A connection was forcibly closed by a peer.  This normally results
          from a loss of the connection on the remote socket due to a time-out
          or a reboot.

     55  ENOBUFS  No buffer space available
          An operation on a socket or pipe was not performed because the
          system lacked sufficient buffer space or because a queue was full.

     56  EISCONN  Socket is already connected
          A connect request was made on an already connected socket; or, a
          sendto or sendmsg request on a connected socket specified a
          destination when already connected.

     57  ENOTCONN  Socket is not connected
          An request to send or receive data was disallowed because the socket
          is not connected and (when sending on a  datagram socket) no address
          was supplied.

     58  ESHUTDOWN  Can't send after socket shutdown
          A request to send data was disallowed because the socket had already
          been shut down with a previous shutdown(2) call.

     59  ETOOMANYREFS  Too many references: can't splice

     60  ETIMEDOUT  Connection timed out
          A connect or send request failed because the connected party did not
          properly respond after a period of time.  (The time-out period is
          dependent on the communication protocol.)

     61  ECONNREFUSED  Connection refused
          No connection could be made because the target machine actively
          refused it.  This usually results from trying to connect to a
          service that is inactive on the foreign host.

     Miscellany

     62  ELOOP  Too many levels of symbolic links
          A pathname lookup involved more than eight symbolic links.

     63  ENAMETOOLONG  File name too long
          A component of a pathname exceeded 255 (MAXNAMELEN) characters, or
          an entire pathname exceeded 1023 (MAXPATHLEN-1) characters.

     64  ENOTEMPTY  Directory not empty
          A directory with entries other than dot (.) and dot-dot (..)  was
          supplied to a remove directory or rename call.

     65-74  unused

     75  EHOSTDOWN  Host is down
          A socket operation failed because the destination host was down.

     76  EHOSTUNREACH  Host is unreachable
          A socket operation was attempted to an unreachable host.

     77-104  unused

DEFINITIONS
     Process ID
          Each active process in the system is uniquely identified by a
          positive integer called a process ID.  The range of this ID is from
          0 to 30000.

     Parent Process ID
          A new process is created by a currently active process; (see
          fork(2)).  The parent process ID of a process is the process ID of
          its creator.

     Process Group ID
          Each active process is a member of a process group that is
          identified by a positive integer called the process group ID.  This
          is the process ID of the group leader.  This grouping permits the
          signaling of related processes (see killpg(2)) and the job control
          mechanisms of csh(1).

     tty Group ID
          Each active process can be a member of a terminal group that is
          identified by a positive integer called the tty group ID. This
          grouping is used to arbitrate between multiple jobs contending for
          the same terminal (see csh(1) and tty(4)).

     Real User ID and Real Group ID
          Each user on the system is identified by a positive integer termed
          the real user ID.

          Each user is also a member of one or more groups. One of these
          groups is distinguished from others and used in implementing
          accounting facilities.  The positive integer corresponding to this
          distinguished group is termed the real group ID.

          All processes have a real user ID and real group ID.  These are
          initialized from the equivalent attributes of the process that
          created it.

     Real Organization ID
          Each user is also a member of one or more organizations. One of
          these organizations is distinguished from others and used in
          implementing accounting facilities.  The positive integer
          corresponding to this distinguished organization is termed the real
          organization ID.

          All processes have a real organization ID.  These are initialized
          from the equivalent attributes of the process that created it.

     Effective User ID, Effective Group ID, Effective Organization ID, and
     Access Groups
          Access to system resources is governed by four values:  the
          effective user ID, the effective group ID, the effective
          organization ID, and the group access list.

          The effective user ID, effective group ID, and effective
          organization ID are initially the process' real user ID, real group
          ID, and real organization ID, respectively.  Any can be modified
          through execution of a set-user-ID, set-group-ID, or set-org-ID file
          (possibly by one its ancestors) (see execve(2)).

          The group access list is an additional set of group IDs used only in
          determining resource accessibility.  Access checks are performed as
          described below in "File Access Permissions."

     Super-User
          A process is recognized as a "super-user" process and is granted
          special privileges if its effective user ID is 0.
     Special Processes
          Domain/OS BSD has no Process 0; under some implementations, it is
          the scheduler.  Process 1 is the initialization process init, and is
          the ancestor of every other process in the system.  It is used to
          control the process structure.  Process 2 is null (under some
          implementations, Process 2 is the paging daemon).

     Descriptor
          An integer assigned by the system when a file is referenced by
          open(2) or dup(2), or when a socket is created by pipe(2),
          socket(2), or socketpair(2), which uniquely identifies an access
          path to that file or socket from a given process or any of its
          children.

     File Name
          Names consisting of up to 255 (MAXNAMELEN) characters can be used to
          name an ordinary file, special file, or directory.

          These characters can be selected from the set of all ASCII character
          excluding 0 (null) and the ASCII code for / (slash).  (The parity
          bit, bit 8, must be 0.)

          Note that it is generally unwise to use *, ?, [, or ] as part of
          file names because of the special meaning attached to these
          characters by the shell.

     Pathname
          A pathname is a null terminated character string starting with an
          optional slash (/), followed by zero or more directory names
          separated by slashes, optionally followed by a filename.  The total
          length of a pathname must be less than 1024 (MAXPATHLEN) characters.

          If a pathname begins with a slash, the path search begins at the
          "root" directory.  Otherwise, the search begins from the current
          working directory.  A slash by itself names the root directory.  A
          null pathname refers to the current directory.

     Directory
          A directory is a special type of file that contains entries that are
          references to other files.  Directory entries are called links.  By
          convention, a directory contains at least two links, . and ..,
          referred to as "dot" and "dot-dot" respectively.  Dot refers to the
          directory itself and dot-dot refers to its parent directory.

     Root Directory and Current Working Directory
          Each process has associated with it a concept of a root directory
          and a current working directory for the purpose of resolving path
          name searches.  A process' root directory need not be the root
          directory of the root file system.

     File Access Permissions
          Every file in the file system has a set of access permissions.
          These permissions are used in determining whether a process may
          perform a requested operation on the file (such as opening a file
          for writing).  Access permissions are established at the time a file
          is created.  They may be changed at some later time through the
          chmod(2) call.

          File access is broken down according to whether a file may be read,
          written, or executed.  Directory files use the execute permission to
          control if the directory may be searched.

          File access permissions are interpreted by the system as they apply
          to three different classes of users: the owner of the file, those
          users in the file's group, anyone else.  Every file has an
          independent set of access permissions for each of these classes.
          When an access check is made, the system decides if permission
          should be granted by checking the access information applicable to
          the caller.

          Read, write, and execute/search permissions on a file are granted to
          a process if

          ⊕  The process' effective user ID is that of the super-user.

          ⊕  The process' effective user ID matches the user ID of the owner
             of the file and the owner permissions allow the access.

          ⊕  The process' effective user ID does not match the user ID of the
             owner of the file, and either the process' effective group ID
             matches the group ID of the file, or the group ID of the file is
             in the process' group access list, and the group permissions
             allow the access.

          ⊕  Neither the effective user ID nor effective group ID and group
             access list of the process match the corresponding user ID and
             group ID of the file, but the permissions for "other users" allow
             access.

          Otherwise, permission is denied.

          Domain/OS BSD derives file access permissions from Domain/OS "Access
          Control Lists" (ACLs).  Domain/OS BSD derives permissions for the
          owner and group of an object from analogous entries in the ACL.  It
          derives permissions for "others," however, from at least two entries
          in the ACL, one of which sets the access rights for the
          organization.  For more information, see "Protection of Files and
          Directories" in Managing BSD System Software.

     Sockets and Address Families

          A socket is an endpoint for communication between processes.  Each
          socket has queues for sending and receiving data.

          Sockets are typed according to their communications properties.
          These properties include whether messages sent and received at a
          socket require the name of the partner, whether communication is
          reliable, the format used in naming message recipients, etc.

          Each instance of the system supports some collection of socket
          types; consult socket(2) for more information about the types
          available and their properties.

          Each instance of the system supports some number of sets of
          communications protocols.  Each protocol set supports addresses of a
          certain format.  An "address family" is the set of addresses for a
          specific group of protocols.  Each socket has an address chosen from
          the address family in which the socket was created.

FILES
     /lib/clib

SEE ALSO
     intro(3), perror(3)
     Managing BSD System Software.

NOTES
     *UNIX is a registered trademark of AT&T in the USA and other countries.

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026