Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ intro(2) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought



intro(2)                  SYSTEM CALLS                   intro(2)



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.



                                                                1





intro(2)                  SYSTEM CALLS                   intro(2)



     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



                                                                2





intro(2)                  SYSTEM CALLS                   intro(2)



          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.




                                                                3





intro(2)                  SYSTEM CALLS                   intro(2)



     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)].




                                                                4





intro(2)                  SYSTEM CALLS                   intro(2)



     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



                                                                5





intro(2)                  SYSTEM CALLS                   intro(2)



          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.





                                                                6





intro(2)                  SYSTEM CALLS                   intro(2)



     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.



                                                                7





intro(2)                  SYSTEM CALLS                   intro(2)



     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.





                                                                8





intro(2)                  SYSTEM CALLS                   intro(2)



     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.




                                                                9





intro(2)                  SYSTEM CALLS                   intro(2)



     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.




                                                               10





intro(2)                  SYSTEM CALLS                   intro(2)



  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



                                                               11





intro(2)                  SYSTEM CALLS                   intro(2)



          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.




                                                               12





intro(2)                  SYSTEM CALLS                   intro(2)



  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 */
                 ushort  seq;   /* slot usage sequence # */
                 keyt   key;   /* key */



                                                               13





intro(2)                  SYSTEM CALLS                   intro(2)



          *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.

          The  effective  group  ID  of   the   process   matches
          msgperm.cgid  or  msgperm.gid and the appropriate bit



                                                               14





intro(2)                  SYSTEM CALLS                   intro(2)



          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
     for any process ID, process group ID and session ID equal to
     that process ID.



                                                               15





intro(2)                  SYSTEM CALLS                   intro(2)



  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.

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





                                                               16





intro(2)                  SYSTEM CALLS                   intro(2)



     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
          values   run  sequentially  from  0  to  the  value  of
          semnsems minus 1.




                                                               17





intro(2)                  SYSTEM CALLS                   intro(2)



          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.

          The  effective  group  ID  of   the   process   matches
          semperm.cgid  or  semperm.gid and the appropriate bit



                                                               18





intro(2)                  SYSTEM CALLS                   intro(2)



          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 */
          ushort           shmcnattch;  /* used only for shminfo */
          timet           shmatime;    /* last attach time */
          timet           shmdtime;    /* last detach time */
          timet           shmctime;    /* last change time */



                                                               19





intro(2)                  SYSTEM CALLS                   intro(2)



                                         /* 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
          00040   READ by group
          00020   WRITE by group
          00004   READ by others
          00002   WRITE by others





                                                               20





intro(2)                  SYSTEM CALLS                   intro(2)



     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
          shmperm.cuid  or  shmperm.uid  in  the data structure
          associated with shmid and the appropriate  bit  of  the
          ``user'' portion (0600) of shmperm.mode is set.

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

          The appropriate bit of the ``other''  portion  (06)  of
          shmperm.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
     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



                                                               21





intro(2)                  SYSTEM CALLS                   intro(2)



     permissions, 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.















































                                                               22



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