Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ intro(2) — svr4 — mips UMIPS RISC/os 5.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought



INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



NAME
     intro - introduction to system calls and error numbers

SYNOPSIS
     #include <errno.h>

DESCRIPTION
     This section describes all of the system calls.  Most of
     these calls have one or more error returns.  An error condi-
     tion is indicated by an otherwise impossible returned value.
     This is almost always -1 or the NULL pointer; the individual
     descriptions specify the details.  An error number is also
     made available in the external variable errno.  errno is not
     cleared on successful calls, so it should be tested only
     after an error has been indicated.

     Each system call description attempts to list all possible
     error numbers.  The following is a complete list of the
     error numbers and their names as defined in <errno.h>.

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

     2  ENOENT   No such file or directory
          A file name is specified and the file should exist but
          doesn't, or one of the directories in a path name does
          not exist.

     3  ESRCH   No such process
          No process can be found corresponding to that specified
          by PID in the kill or ptrace routine.

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

     5  EIO   I/O error
          Some physical I/O error has occurred.  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 exist, or exists beyond the limit of the device.
          It may also occur when, for example, a tape drive is
          not on-line or no disk pack is loaded on a drive.



                        Printed 11/19/92                   Page 1





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     7  E2BIG   Arg list too long
          An argument list longer than ARG_MAX bytes is presented
          to a member of the exec family of routines.  The argu-
          ment list limit is the sum of the size of the argument
          list plus the size of the environment's exported shell
          variables.

     8  ENOEXEC   Exec format error
          A request is made to execute a file which, although it
          has the appropriate permissions, does not start with a
          valid format [see a.out(4)].

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

     10  ECHILD   No child processes
          A wait routine was executed by a process that had no
          existing or unwaited-for child processes.

     11  EAGAIN   No more processes
          For example, the fork routine failed because the
          system's process table is full or the user is not
          allowed to create any more processes, or a system call
          failed because of insufficient memory or swap space.

     12  ENOMEM   Not enough space
          During execution of an exec, brk, or sbrk routine, a
          program asks for more space than the system is able to
          supply.  This is not a temporary condition; the maximum
          size is a system parameter.  The error may also occur
          if the arrangement of text, data, and stack segments
          requires too many segmentation registers, or if there
          is not enough swap space during the fork routine.  If
          this error occurs on a resource associated with Remote
          File Sharing (RFS), it indicates a memory depletion
          which may be temporary, dependent on system activity at
          the time the call was invoked.

     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 use an argument of a routine.  For example, errno
          potentially may be set to EFAULT any time a routine
          that takes a pointer argument is passed an invalid
          address, if the system can detect the condition.
          Because systems will differ in their ability to reli-
          ably detect a bad address, on some implementations



 Page 2                 Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          passing a bad address to a routine will result in unde-
          fined behavior.

     15  ENOTBLK   Block device required
          A non-block file was mentioned where a block device was
          required (e.g., in a call to the mount routine).

     16  EBUSY   Device busy
          An attempt was made to mount a device that was already
          mounted or an attempt was made to unmount a device on
          which there is an active file (open file, current
          directory, mounted-on file, active text segment).  It
          will also occur if an attempt is made to enable
          accounting when it is already enabled.  The device or
          resource is currently unavailable.

     17  EEXIST   File exists
          An existing file was mentioned in an inappropriate con-
          text (e.g., call to the link routine).

     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 operation
          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 (e.g., in a path prefix or as an argument to
          the chdir routine).

     21  EISDIR   Is a directory
          An attempt was made to write on a directory.

     22  EINVAL   Invalid argument
          An invalid argument was specified (e.g., unmounting a
          non-mounted device), mentioning an undefined signal in
          a call to the signal or kill routine.

     23  ENFILE   File table overflow
          The system file table is full (i.e., SYS_OPEN files are
          open, and temporarily no more files can be opened).

     24  EMFILE   Too many open files
          No process may have more than OPEN_MAX file descriptors
          open at a time.

     25  ENOTTY   Not a typewriter
          A call was made to the ioctl routine specifying a file
          that is not a special character device.




                        Printed 11/19/92                   Page 3





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



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

     27  EFBIG   File too large
          The size of a file exceeded the maximum file size,
          FCHR_MAX [see getrlimit].

     28  ENOSPC   No space left on device
          While writing an ordinary file or creating a directory
          entry, there is no free space left on the device.  In
          the fcntl routine, the setting or removing of record
          locks on a file cannot be accomplished because there
          are no more record entries left on the system.

     29  ESPIPE   Illegal seek
          A call to the lseek routine was issued to a pipe.

     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 the maximum number of
          links, LINK_MAX, to a file.

     32  EPIPE   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.

     33  EDOM   Math argument out of domain of func
          The argument of a function in the math package (3M) is
          out of the domain of the function.

     34  ERANGE   Math result not representable
          The value of a function in the math package (3M) is not
          representable within machine precision.

     35  ENOMSG   No message of desired type
          An attempt was made to receive a message of a type that
          does not exist on the specified message queue [see
          msgop(2)].

     36  EIDRM   Identifier removed
          This error is returned to processes that resume execu-
          tion due to the removal of an identifier from the file
          system's name space [see msgctl(2), semctl(2), and
          shmctl(2)].




 Page 4                 Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     37  ECHRNG   Channel number out of range

     38  EL2NSYNC   Level 2 not synchronized

     39  EL3HLT   Level 3 halted

     40  EL3RST   Level 3 reset

     41  ELNRNG   Link number out of range

     42  EUNATCH   Protocol driver not attached

     43  ENOCSI   No CSI structure available

     44  EL2HLT   Level 2 halted

     45  EDEADLK   Deadlock condition
          A deadlock situation was detected and avoided.  This
          error pertains to file and record locking.

     46  ENOLCK   No record locks available
          There are no more locks available.  The system lock
          table is full [see fcntl(2)].

     47-49     Reserved

     58-59     Reserved

     60  ENOSTR   Device not a stream
          A putmsg or getmsg system call was attempted on a file
          descriptor that is not a STREAMS device.

     61  ENODATA   No data available

     62  ETIME   Timer expired
          The timer set for a STREAMS ioctl call has expired.
          The cause of this error is device specific and could
          indicate either a hardware or software failure, or
          perhaps a timeout value that is too short for the
          specific operation.  The status of the ioctl operation
          is indeterminate.

     63  ENOSR   Out of stream resources
          During a STREAMS open, either no STREAMS queues or no
          STREAMS head data structures were available.  This is a
          temporary condition; one may recover from it if other
          processes release resources.

     64  ENONET   Machine is not on the network
          This error is Remote File Sharing (RFS) specific.  It
          occurs when users try to advertise, unadvertise, mount,
          or unmount remote resources while the machine has not



                        Printed 11/19/92                   Page 5





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          done the proper startup to connect to the network.

     65  ENOPKG   Package not installed
          This error occurs when users attempt to use a system
          call from a package which has not been installed.

     66  EREMOTE   Object is remote
          This error is RFS specific.  It occurs when users try
          to advertise a resource which is not on the local
          machine, or try to mount/unmount a device (or pathname)
          that is on a remote machine.

     67  ENOLINK   Link has been severed
          This error is RFS specific.  It occurs when the link
          (virtual circuit) connecting to a remote machine is
          gone.

     68  EADV   Advertise error
          This error is RFS specific.  It occurs when users try
          to advertise a resource which has been advertised
          already, or try to stop RFS while there are resources
          still advertised, or try to force unmount a resource
          when it is still advertised.

     69  ESRMNT   Srmount error
          This error is RFS specific.  It occurs when an attempt
          is made to stop RFS while resources are still mounted
          by remote machines, or when a resource is readvertised
          with a client list that does not include a remote
          machine that currently has the resource mounted.

     70  ECOMM   Communication error on send
          This error is RFS specific.  It occurs when the current
          process is waiting for a message from a remote machine,
          and the virtual circuit fails.

     71  EPROTO   Protocol error
          Some protocol error occurred.  This error is device
          specific, but is generally not related to a hardware
          failure.

     74  EMULTIHOP   Multihop attempted
          This error is RFS specific.  It occurs when users try
          to access remote resources which are not directly
          accessible.

     76  EDOTDOT   Error 76
          This error is RFS specific.  A way for the server to
          tell the client that a process has transferred back
          from mount point.





 Page 6                 Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     77  EBADMSG   Not a data message
          During a read, getmsg, or ioctl IRECVFD system call to
          a STREAMS device, something has come to the head of the
          queue that can't be processed.  That something depends
          on the system call:
            read: control information or a passed file descrip-
          tor.
            getmsg: passed file descriptor.
            ioctl: control or data information.

     78  ENAMETOOLONG   File name too long
          The length of the path argument exceeds PATHMAX, or
          the length of a path component exceeds NAMEMAX while
          POSIXNOTRUNC is in effect; see limits(4).

     79  EOVERFLOW
          Value too large for defined data type.

     80  ENOTUNIQ   Name not unique on network
          Given log name not unique.

     81  EBADFD   File descriptor in bad state
          Either a file descriptor refers to no open file or a
          read request was made to a file that is open only for
          writing.

     82  EREMCHG   Remote address changed

     83  ELIBACC   Cannot access a needed shared library
          Trying to exec an a.out that requires a static shared
          library and the static shared library doesn't exist or
          the user doesn't have permission to use it.

     84  ELIBBAD   Accessing a corrupted shared library
          Trying to exec an a.out that requires a static shared
          library (to be linked in) and exec could not load the
          static shared library.  The static shared library is
          probably corrupted.

     85  ELIBSCN   .lib section in a.out corrupted
          Trying to exec an a.out that requires a static shared
          library (to be linked in) and there was erroneous data
          in the .lib section of the a.out.  The .lib section
          tells exec what static shared libraries are needed.
          The a.out is probably corrupted.

     86  ELIBMAX   Attempting to link in more shared libraries
          than system limit
          Trying to exec an a.out that requires more static
          shared libraries than is allowed on the current confi-
          guration of the system.  See the System Administrator's
          Guide.



                        Printed 11/19/92                   Page 7





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     87  ELIBEXEC   Cannot exec a shared library directly
          Attempting to exec a shared library directly.

     88  EILSEQ   Error 88
          Illegal byte sequence.  Handle multiple characters as a
          single character.

     89  ENOSYS   Operation not applicable

     90  ELOOP   Number of symbolic links encountered during path
          name traversal exceeds MAXSYMLINKS

     91  ESTART   Error 91
          Interrupted system call should be restarted.

     92  ESTRPIPE   Error 92
          Streams pipe error (not externally visible).

     93  ENOTEMPTY   Directory not empty

     94  EUSERS   Too many users
          Too many users.

     95  ENOTSOCK   Socket operation on non-socket
          Self-explanatory.

     96  EDESTADDRREQ   Destination address required
          A required address was omitted from an operation on a
          transport endpoint.  Destination address required.

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

     98  EPROTOTYPE   Protocol wrong type for socket
          A protocol was specified that does not support the
          semantics of the socket type requested.

     99  ENOPROTOOPT   Protocol not available
          A bad option or level was specified when getting or
          setting options for a protocol.

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

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





 Page 8                 Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     122  EOPNOTSUPP   Operation not supported on transport end-
          point
          For example, trying to accept a connection on a
          datagram transport endpoint.

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

     124  EAFNOSUPPORT   Address family not supported by protocol
          family
          An address incompatible with the requested protocol was
          used.

     125  EADDRINUSE   Address already in use
          User attempted to use an address already in use, and
          the protocol does not allow this.

     126  EADDRNOTAVAIL   Cannot assign requested address
          Results from an attempt to create a transport endpoint
          with an address not on the current machine.

     127  ENETDOWN   Network is down
          Operation encountered a dead network.

     128  ENETUNREACH   Network is unreachable
          Operation was attempted to an unreachable network.

     129  ENETRESET   Network dropped connection because of reset
          The host you were connected to crashed and rebooted.

     130  ECONNABORTED   Software caused connection abort
          A connection abort was caused internal to your host
          machine.

     131  ECONNRESET   Connection reset by peer
          A connection was forcibly closed by a peer.  This nor-
          mally results from a loss of the connection on the
          remote host due to a timeout or a reboot.

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

     133  EISCONN   Transport endpoint is already connected
          A connect request was made on an already connected
          transport endpoint; or, a sendto or sendmsg request on
          a connected transport endpoint specified a destination
          when already connected.




                        Printed 11/19/92                   Page 9





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     134  ENOTCONN   Transport endpoint is not connected
          A request to send or receive data was disallowed
          because the transport endpoint is not connected and
          (when sending a datagram) no address was supplied.

     143  ESHUTDOWN   Cannot send after transport endpoint shut-
          down
          A request to send data was disallowed because the tran-
          sport endpoint has already been shut down.

     144  ETOOMANYREFS   Too many references: cannot splice

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

     146  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 remote
          host.

     147  EHOSTDOWN   Host is down
          A transport provider operation failed because the des-
          tination host was down.

     148  EHOSTUNREACH   No route to host
          A transport provider operation was attempted to an
          unreachable host.

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

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

     151  ESTALE   Stale NFS file handle

DEFINITIONS
   Background Process Group
     Any process group that is not the foreground process group
     of a session that has established a connection with a con-
     trolling terminal.

   Controlling Process
     A session leader that established a connection to a control-
     ling terminal.




 Page 10                Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



   Controlling Terminal
     A terminal that is associated with a session.  Each session
     may have, at most, one controlling terminal associated with
     it and a controlling terminal may be associated with only
     one session.  Certain input sequences from the controlling
     terminal cause signals to be sent to process groups in the
     session associated with the controlling terminal; see ter-
     mio(7).

   Directory
     Directories organize files into a hierarchical system where
     directories are the nodes in the hierarchy.  A directory is
     a file that catalogues the list of files, including direc-
     tories (sub-directories), that are directly beneath it in
     the hierarchy.  Entries in a directory file are called
     links.  A link associates a file identifier with a filename.
     By convention, a directory contains at least two links, .
     (dot) and .. (dot-dot).  The link called dot refers to the
     directory itself while dot-dot refers to its parent direc-
     tory.  The root directory, which is the top-most node of the
     hierarchy, has itself as its parent directory.  The pathname
     of the root directory is / and the parent directory of the
     root directory is /.

   Downstream
     In a stream, the direction from stream head to driver.

   Driver
     In a stream, the driver provides the interface between peri-
     pheral hardware and the stream.  A driver can also be a
     pseudo-driver, such as a multiplexor or log driver [see
     log(7)], which is not associated with a hardware device.

   Effective User ID and Effective Group ID
     An active process has an effective user ID and an effective
     group ID that are used to determine file access permissions
     (see below).  The effective user ID and effective group ID
     are equal to the process's real user ID and real group ID
     respectively, unless the process or one of its ancestors
     evolved from a file that had the set-user-ID bit or set-
     group ID bit set [see exec(2)].

   File Access Permissions
     Read, write, and execute/search permissions on a file are
     granted to a process if one or more of the following are
     true:

          The effective user ID of the process is super-user.

          The effective user ID of the process matches the user
          ID of the owner of the file and the appropriate access
          bit of the ``owner'' portion (0700) of the file mode is



                        Printed 11/19/92                  Page 11





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          set.

          The effective user ID of the process does not match the
          user ID of the owner of the file, but either the effec-
          tive group ID or one of the supplementary group IDs of
          the process match the group ID of the file and the
          appropriate access bit of the ``group'' portion (0070)
          of the file mode is set.

          The effective user ID of the process does not match the
          user ID of the owner of the file, and neither the
          effective group ID nor any of the supplementary group
          IDs of the process match the group ID of the file, but
          the appropriate access bit of the ``other'' portion
          (0007) of the file mode is set.

     Otherwise, the corresponding permissions are denied.

   File Descriptor
     A file descriptor is a small integer used to do I/O on a
     file.  The value of a file descriptor is from 0 to
     (NOFILES-1).  A process may have no more than NOFILES file
     descriptors open simultaneously.  A file descriptor is
     returned by system calls such as open, or pipe.  The file
     descriptor is used as an argument by calls such as read,
     write, ioctl, and close.

   File Name
     Names consisting of 1 to NAMEMAX characters may be used to
     name an ordinary file, special file or directory.

     These characters may be selected from the set of all charac-
     ter values excluding \0 (null) and the ASCII code for /
     (slash).

     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 [see sh(1)].  Although per-
     mitted, the use of unprintable characters in file names
     should be avoided.

     A file name is sometimes referred to as a pathname com-
     ponent.  The interpretation of a pathname component is
     dependent on the values of NAMEMAX and POSIXNOTRUNC
     associated with the path prefix of that component.  If any
     pathname component is longer than NAMEMAX and
     POSIXNOTRUNC is in effect for the path prefix of that
     component [see fpathconf(2) and limits(4)], it shall be con-
     sidered an error condition in that implementation.  Other-
     wise, the implementation shall use the first NAMEMAX bytes
     of the pathname component.




 Page 12                Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



   Foreground Process Group
     Each session that has established a connection with a con-
     trolling terminal will distinguish one process group of the
     session as the foreground process group of the controlling
     terminal.  This group has certain privileges when accessing
     its controlling terminal that are denied to background pro-
     cess groups.

   Message
     In a stream, one or more blocks of data or information, with
     associated STREAMS control structures.  Messages can be of
     several defined types, which identify the message contents.
     Messages are the only means of transferring data and commun-
     icating within a stream.

   Message Queue
     In a stream, a linked list of messages awaiting processing
     by a module or driver.

   Message Queue Identifier
     A message queue identifier (msqid) is a unique positive
     integer created by a msgget system call.  Each msqid has a
     message queue and a data structure associated with it.  The
     data structure is referred to as msqidds and contains the
     following members:

          struct    ipcperm msgperm;
          struct    msg *msgfirst;
          struct    msg *msglast;
          ushort    msgcbytes;
          ushort    msgqnum;
          ushort    msgqbytes;
          pidt     msglspid;
          pidt     msglrpid;
          timet    msgstime;
          timet    msgrtime;
          timet    msgctime;

     Here are descriptions of the fields of the msqidds struc-
     ture:

          msgperm is an ipcperm structure that specifies the
          message operation permission (see below).  This struc-
          ture includes the following members:

                 uidt    cuid;   /* creator user id */
                 gidt    cgid;   /* creator group id */
                 uidt    uid;    /* user id */
                 gidt    gid;    /* group id */
                 modet   mode;   /* r/w permission */





                        Printed 11/19/92                  Page 13





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



                 ushort   seq;    /* slot usage sequence # */
                 keyt    key;    /* key */

          *msgfirst is a pointer to the first message on the
          queue.

          *msglast is a pointer to the last message on the
          queue.

          msgcbytes is the current number of bytes on the queue.

          msgqnum is the number of messages currently on the
          queue.

          msgqbytes is the maximum number of bytes allowed on
          the queue.

          msglspid is the process ID of the last process that
          performed a msgsnd operation.

          msglrpid is the process id of the last process that
          performed a msgrcv operation.

          msgstime is the time of the last msgsnd operation.

          msgrtime is the time of the last msgrcv operation

          msgctime is the time of the last msgctl operation that
          changed a member of the above structure.

   Message Operation Permissions
     In the msgop and msgctl system call descriptions, the per-
     mission required for an operation is given as {token}, where
     token is the type of permission needed, interpreted as fol-
     lows:

                 00400   READ by user
                 00200   WRITE by user
                 00040   READ by group
                 00020   WRITE by group
                 00004   READ by others
                 00002   WRITE by others

     Read and write permissions on a msqid are granted to a pro-
     cess if one or more of the following are true:

          The effective user ID of the process is super-user.

          The effective user ID of the process matches
          msgperm.cuid or msgperm.uid in the data structure
          associated with msqid and the appropriate bit of the
          ``user'' portion (0600) of msgperm.mode is set.



 Page 14                Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          The effective group ID of the process matches
          msgperm.cgid or msgperm.gid and the appropriate bit
          of the ``group'' portion (060) of msgperm.mode is set.

          The appropriate bit of the ``other'' portion (006) of
          msgperm.mode is set.

     Otherwise, the corresponding permissions are denied.

   Module
     A module is an entity containing processing routines for
     input and output data.  It always exists in the middle of a
     stream, between the stream's head and a driver.  A module is
     the STREAMS counterpart to the commands in a shell pipeline
     except that a module contains a pair of functions which
     allow independent bidirectional (downstream and upstream)
     data flow and processing.

   Multiplexor
     A multiplexor is a driver that allows streams associated
     with several user processes to be connected to a single
     driver, or several drivers to be connected to a single user
     process.  STREAMS does not provide a general multiplexing
     driver, but does provide the facilities for constructing
     them and for connecting multiplexed configurations of
     streams.

   Orphaned Process Group
     A process group in which the parent of every member in the
     group is either itself a member of the group, or is not a
     member of the process group's session.

   Path Name
     A path name is a null-terminated character string starting
     with an optional slash (/), followed by zero or more direc-
     tory names separated by slashes, optionally followed by a
     file name.

     If a path name 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.

     Unless specifically stated otherwise, the null path name is
     treated as if it named a non-existent file.

   Process ID
     Each process in the system is uniquely identified during its
     lifetime by a positive integer called a process ID.  A pro-
     cess ID may not be reused by the system until the process
     lifetime, process group lifetime and session lifetime ends



                        Printed 11/19/92                  Page 15





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     for any process ID, process group ID and session ID equal to
     that process ID.

   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.

   Privilege
     Having appropriate privilege means having the capability to
     override system restrictions.

   Process Group
     Each process in the system is a member of a process group
     that is identified by a process group ID.  Any process that
     is not a process group leader may create a new process group
     and become its leader.  Any process that is not a process
     group leader may join an existing process group that shares
     the same session as the process.  A newly created process
     joins the process group of its parent.

   Process Group Leader
     A process group leader is a process whose process ID is the
     same as its process group ID.

   Process Group ID
     Each active process is a member of a process group and is
     identified by a positive integer called the process group
     ID.  This ID is the process ID of the group leader.  This
     grouping permits the signaling of related processes [see
     kill(2)].

   Process Lifetime
     A process lifetime begins when the process is forked and
     ends after it exits, when its termination has been ack-
     nowledged by its parent process.  See wait(2).

   Process Group Lifetime
     A process group lifetime begins when the process group is
     created by its process group leader, and ends when the life-
     time of the last process in the group ends or when the last
     process in the group leaves the group.

   Read Queue
     In a stream, the message queue in a module or driver con-
     taining messages moving upstream.

   Real User ID and Real Group ID
     Each user allowed on the system is identified by a positive
     integer (0 to MAXUID) called a real user ID.





 Page 16                Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     Each user is also a member of a group.  The group is identi-
     fied by a positive integer called the real group ID.

     An active process has a real user ID and real group ID that
     are set to the real user ID and real group ID, respectively,
     of the user responsible for the creation of the process.

   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.  The root directory of a pro-
     cess need not be the root directory of the root file system.

   Saved User ID and Saved Group ID
     The saved user ID and saved group ID are the values of the
     effective user ID and effective groupID prior to an exec of
     a file whose set user or set group file mode bit has been
     set [see exec(2)].

   Semaphore Identifier
     A semaphore identifier (semid) is a unique positive integer
     created by a semget system call.  Each semid has a set of
     semaphores and a data structure associated with it.  The
     data structure is referred to as semidds and contains the
     following members:

          struct   ipcperm semperm;   /* operation permission struct */
          struct   sem *sembase;       /* ptr to first semaphore in set */
          ushort   semnsems;           /* number of sems in set */
          timet   semotime;           /* last operation time */
          timet   semctime;           /* last change time */
                                        /* Times measured in secs since */
                                        /* 00:00:00 GMT, Jan. 1, 1970 */

     Here are descriptions of the fields of the semidds struc-
     ture:

          semperm is an ipcperm structure that specifies the
          semaphore operation permission (see below).  This
          structure includes the following members:

                 uidt    uid;    /* user id */
                 gidt    gid;    /* group id */
                 uidt    cuid;   /* creator user id */
                 gidt    cgid;   /* creator group id */
                 modet   mode;   /* r/a permission */
                 ushort   seq;    /* slot usage sequence number */
                 keyt    key;    /* key */

          semnsems is equal to the number of semaphores in the
          set.  Each semaphore in the set is referenced by a non-
          negative integer referred to as a semnum.  semnum



                        Printed 11/19/92                  Page 17





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          values run sequentially from 0 to the value of
          semnsems minus 1.

          semotime is the time of the last semop operation.

          semctime is the time of the last semctl operation that
          changed a member of the above structure.

     A semaphore is a data structure called sem that contains the
     following members:

          ushort   semval;    /* semaphore value */
          pidt    sempid;    /* pid of last operation  */
          ushort   semncnt;   /* # awaiting semval > cval */
          ushort   semzcnt;   /* # awaiting semval = 0 */

          semval is a non-negative integer that is the actual
          value of the semaphore.

          sempid is equal to the process ID of the last process
          that performed a semaphore operation on this semaphore.

          semncnt is a count of the number of processes that are
          currently suspended awaiting this semaphore's semval to
          become greater than its current value.

          semzcnt is a count of the number of processes that are
          currently suspended awaiting this semaphore's semval to
          become 0.

   Semaphore Operation Permissions
     In the semop and semctl system call descriptions, the per-
     mission required for an operation is given as {token}, where
     token is the type of permission needed interpreted as fol-
     lows:

          00400   READ by user
          00200   ALTER by user
          00040   READ by group
          00020   ALTER by group
          00004   READ by others
          00002   ALTER by others

     Read and alter permissions on a semid are granted to a pro-
     cess if one or more of the following are true:

          The effective user ID of the process is super-user.

          The effective user ID of the process matches
          semperm.cuid or semperm.uid in the data structure
          associated with semid and the appropriate bit of the
          ``user'' portion (0600) of semperm.mode is set.



 Page 18                Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          The effective group ID of the process matches
          semperm.cgid or semperm.gid and the appropriate bit
          of the ``group'' portion (060) of semperm.mode is set.

          The appropriate bit of the ``other'' portion (06) of
          semperm.mode is set.

     Otherwise, the corresponding permissions are denied.

   Session
     A session is a group of processes identified by a common ID
     called a session ID, capable of establishing a connection
     with a controlling terminal. Any process that is not a pro-
     cess group leader may create a new session and process
     group, becoming the session leader of the session and pro-
     cess group leader of the process group.  A newly created
     process joins the session of its creator.

   Session ID
     Each session in the system is uniquely identified during its
     lifetime by a positive integer called a session ID, the pro-
     cess ID of its session leader.

   Session Leader
     A session leader is a process whose session ID is the same
     as its process and process group ID.

   Session Lifetime
     A session lifetime begins when the session is created by its
     session leader, and ends when the lifetime of the last pro-
     cess that is a member of the session ends, or when the last
     process that is a member in the session leaves the session.

   Shared Memory Identifier
     A shared memory identifier (shmid) is a unique positive
     integer created by a shmget system call.  Each shmid has a
     segment of memory (referred to as a shared memory segment)
     and a data structure associated with it.  (Note that these
     shared memory segments must be explicitly removed by the
     user after the last reference to them is removed.)  The data
     structure is referred to as shmidds and contains the fol-
     lowing members:

          struct ipcperm   shmperm;      /* operation permission struct */
          int               shmsegsz;     /* size of segment */
          struct region     *shmreg;      /* ptr to region structure */
          char              pad[4];        /* for swap compatibility */
          pidt             shmlpid;      /* pid of last operation */
          pidt             shmcpid;      /* creator pid */
          ushort            shmnattch;    /* number of current attaches */





                        Printed 11/19/92                  Page 19





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          ushort            shmcnattch;   /* used only for shminfo */
          timet            shmatime;     /* last attach time */
          timet            shmdtime;     /* last detach time */
          timet            shmctime;     /* last change time */
                                           /* Times measured in secs since */
                                           /* 00:00:00 GMT, Jan. 1, 1970 */

     Here are descriptions of the fields of the shmidds struc-
     ture:

          shmperm is an ipcperm structure that specifies the
          shared memory operation permission (see below).  This
          structure includes the following members:

                 uidt    cuid;   /* creator user id */
                 gidt    cgid;   /* creator group id */
                 uidt    uid;    /* user id */
                 gidt    gid;    /* group id */
                 modet   mode;   /* r/w permission */
                 ushort   seq;    /* slot usage sequence # */
                 keyt    key;    /* key */

          shmsegsz specifies the size of the shared memory seg-
          ment in bytes.

          shmcpid is the process ID of the process that created
          the shared memory identifier.

          shmlpid is the process ID of the last process that
          performed a shmop operation.

          shmnattch is the number of processes that currently
          have this segment attached.

          shmatime is the time of the last shmat operation [see
          shmop(2)].

          shmdtime is the time of the last shmdt operation [see
          shmop(2)].

          shmctime is the time of the last shmctl operation that
          changed one of the members of the above structure.

   Shared Memory Operation Permissions
     In the shmop and shmctl system call descriptions, the per-
     mission required for an operation is given as {token}, where
     token is the type of permission needed interpreted as fol-
     lows:
          00400   READ by user
          00200   WRITE by user





 Page 20                Printed 11/19/92





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



          00040   READ by group
          00020   WRITE by group
          00004   READ by others
          00002   WRITE by others

     Read and write permissions on a shmid are granted to a pro-
     cess if one or more of the following are true:

          The effective user ID of the process is super-user.

          The effective user ID of the process matches
          shm_perm.cuid or shm_perm.uid in the data structure
          associated with shmid and the appropriate bit of the
          user portion (0600) of shm_perm.mode is set.

          The effective group ID of the process matches
          shm_perm.cgid or shm_perm.gid and the appropriate bit
          of the group portion (060) of shm_perm.mode is set.

          The appropriate bit of the other portion (06) of
          shm_perm.mode is set.

     Otherwise, the corresponding permissions are denied.

   Special Processes
     The process with ID 0 and the process with ID 1 are special
     processes referred to as proc0 and proc1; see kill(2).
     proc0 is the process scheduler.  proc1 is the initialization
     process (init); proc1 is the ancestor of every other process
     in the system and is used to control the process structure.

   STREAMS
     A set of kernel mechanisms that support the development of
     network services and data communication drivers.  It defines
     interface standards for character input/output within the
     kernel and between the kernel and user level processes.  The
     STREAMS mechanism is composed of utility routines, kernel
     facilities and a set of data structures.

   Stream
     A stream is a full-duplex data path within the kernel
     between a user process and driver routines.  The primary
     components are a stream head, a driver and zero or more
     modules between the stream head and driver.  A stream is
     analogous to a shell pipeline except that data flow and pro-
     cessing are bidirectional.

   Stream Head
     In a stream, the stream head is the end of the stream that
     provides the interface between the stream and a user pro-
     cess.  The principle functions of the stream head are pro-
     cessing STREAMS-related system calls, and passing data and



                        Printed 11/19/92                  Page 21





INTRO(2-SVR4)       RISC/os Reference Manual        INTRO(2-SVR4)



     information between a user process and the stream.

   Super-user
     A process is recognized as a super-user process and is
     granted special privileges, such as immunity from file per-
     missions, if its effective user ID is 0.

   Upstream
     In a stream, the direction from driver to stream head.

   Write Queue
     In a stream, the message queue in a module or driver con-
     taining messages moving downstream.










































 Page 22                Printed 11/19/92



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