    INTRO(II)                    11/5/73                    INTRO(II)

                      INTRODUCTION TO SYSTEM CALLS

    Section  II of this manual lists all the entries into the system.
    In most cases two calling sequences are specified, one  of  which
    is  usable from assembly language, and the other from C.  Most of
    these calls have an error return.  From assembly language an  er-
    roneous  call  is always indicated by turning on the c-bit of the
    condition codes.  The presence of an error is most easily  tested
    by  the  instructions  bes  and  bec  (``branch  on error set (or
    clear)'').  These are synonyms for the bcs and bcc  instructions.

    From  C, an error condition is indicated by an otherwise impossi-
    ble returned value.  Almost always this  is  -1;  the  individual
    sections specify the details.

    In  both  cases  an  error number is also available.  In assembly
    language, this number is returned in r0 on erroneous calls.  From
    C, the external variable errno is set to the error number.  Errno
    is not cleared on successful calls, so it should be  tested  only
    after  an error has occurred.  There is a table of messages asso-
    ciated with each error, and a routine for printing  the  message.
    See perror(III).

    The  possible  error numbers are not recited with each writeup in
    section II, since many errors are possible for most of the calls.
    Here  is a list of the error numbers, their names inside the sys-
    tem (for the benefit of system-readers), and the messages  avail-
    able using perror.  A short explanation is also provided.

    0    -    (unused)

    1    EPERM     Not owner and not super-user
       Typically  this error indicates an attempt to modify a file in
       some way forbidden except to its owner.  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 file name is specified and  the  file
       should  exist but doesn't, or when one of the directories in a
       path name does not exist.

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

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

    5    EIO  I/O error

                                  - 1 -

    INTRO(II)                    11/5/73                    INTRO(II)

       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 which does not ex-
       ist, or beyond the limits of the device.  It  may  also  occur
       when,  for  example, a tape drive is not dialled in or no disk
       pack is loaded on a drive.

    7    E2BIG     Arg list too long
       An argument list longer than 512 bytes (counting the  null  at
       the end of each argument) is presented to exec.

    8    ENOEXEC   Exec format error
       A request is made to execute a file which, although it has the
       appropriate permissions, does not start with one of the  magic
       numbers 407 or 410.

    9    EBADF     Bad file number
       Either  a  file  descriptor  refers to no open file, or a read
       (resp. write) request is made to a file which is open only for
       writing (resp. 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 and no more pro-
       cesses can for the moment be created.

    12   ENOMEM    Not enough core
       During an exec or break, a program asks for more core than the
       system  is able to supply.  This is not a temporary condition;
       the maximum core size is a system parameter.   The  error  may
       also  occur  if  the arrangement of text, data, and stack seg-
       ments is such as to require more than the existing 8 segmenta-
       tion registers.

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

    14   -    (unused)

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

    16   EBUSY     Mount 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
       open file or some process's current directory.

    17   EEXIST    File exists
       An  existing  file  was mentioned in an inappropriate context,

                                  - 2 -

    INTRO(II)                    11/5/73                    INTRO(II)

       e.g.  link.

    18   EXDEV     Cross-device link
       A 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; e.g. read a write-only device.

    20   ENOTDIR   Not a directory
       A  non-directory  was specified where a directory is required,
       for example in a path name 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: currently,  dismounting  a  non-mounted
       device,  mentioning an unknown signal in signal, and giving an
       unknown request in stty to the TIU special file.

    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
       Only 15 files can be open per process.

    25   ENOTTY    Not a typewriter
       The  file mentioned in stty or gtty is not a typewriter or one
       of the other devices to which these calls apply.

    26   ETXTBSY   Text file busy
       An attempt to execute a pure-procedure program which  is  cur-
       rently  open  for  writing  (or reading!).  Also an attempt to
       open for writing a pure-procedure program that is  being  exe-
       cuted.

    27   EFBIG     File too large
       An  attempt  to  make  a file larger than the maximum of 32768
       blocks.

    28   ENOSPC    No space left on device
       During a write to an ordinary file, there  is  no  free  space
       left on the device.

    29   ESPIPE    Seek on pipe
       A seek was issued to a pipe.  This error should 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 127 links to a file.

                                  - 3 -

    INTRO(II)                    11/5/73                    INTRO(II)

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

                                  - 4 -