Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ semctl(2) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

semget(2)

semop(2)



semctl(2)                 SYSTEM CALLS                  semctl(2)



NAME
     semctl - semaphore control operations

SYNOPSIS
     #include <sys/types.h>
     #include <sys/ipc.h>
     #include <sys/sem.h>

     union semun {
          int val;
          struct semidds *buf;
          ushort *array;
     };

     int semctl(int semid, int semnum,  int  cmd,  ...  /*  union
     semun arg */);

DESCRIPTION
     semctl provides a variety of semaphore control operations as
     specified by cmd.

     The following cmds are executed with respect  to  the  sema-
     phore specified by semid and semnum:

          GETVAL     Return the value of semval  [see  intro(2)].
                     {READ}

          SETVAL     Set  the  value  of   semval   to   arg.val.
                     {ALTER}.  When  this command is successfully
                     executed, the semadj value corresponding  to
                     the  specified semaphore in all processes is
                     cleared.

          GETPID     Return the value of (int) sempid.  {READ}

          GETNCNT    Return the value of semncnt.  {READ}

          GETZCNT    Return the value of semzcnt.  {READ}

     The following cmds return and set, respectively, every  sem-
     val in the set of semaphores.

          GETALL     Place  semvals  into  array  pointed  to  by
                     arg.array.  {READ}

          SETALL     Set semvals according to the  array  pointed
                     to  by arg.array.  {ALTER}. When this cmd is
                     successfully  executed,  the  semadj  values
                     corresponding to each specified semaphore in
                     all processes are cleared.





                                                                1





semctl(2)                 SYSTEM CALLS                  semctl(2)



     The following cmds are also available:

          IPCSTAT   Place the current value of  each  member  of
                     the  data  structure  associated  with semid
                     into the structure pointed  to  by  arg.buf.
                     The  contents  of this structure are defined
                     in intro(2).  {READ}

          IPCSET    Set the value of the  following  members  of
                     the  data structure associated with semid to
                     the corresponding value found in the  struc-
                     ture pointed to by arg.buf:

                         semperm.uid
                         semperm.gid
                         semperm.mode /* only access permission bits */

                     This command can be executed only by a  pro-
                     cess  that has an effective user ID equal to
                     either that of super-user, or to  the  value
                     of semperm.cuid or semperm.uid in the data
                     structure associated with semid.

          IPCRMID   Remove the semaphore identifier specified by
                     semid from the system and destroy the set of
                     semaphores  and  data  structure  associated
                     with it.  This command only be executed only
                     by a process that has an effective  user  ID
                     equal  to  either  that of super-user, or to
                     the value of semperm.cuid  or  semperm.uid
                     in the data structure associated with semid.

     semctl fails if one or more of the following are true:

     EACCES         Operation permission is denied to the calling
                    process [see intro(2)].

     EINVAL         semid is not a valid semaphore identifier.

     EINVAL         semnum  is  less  than  0  or  greater   than
                    semnsems.

     EINVAL         cmd is not a valid command.

     EINVAL         cmd   is   IPCSET   and   semperm.uid    or
                    semperm.gid is not valid.

     EOVERFLOW      cmd is IPCSTAT and uid or gid is  too  large
                    to  be  stored in the structure pointed to by
                    arg.buf.

     ERANGE         cmd is SETVAL or  SETALL  and  the  value  to



                                                                2





semctl(2)                 SYSTEM CALLS                  semctl(2)



                    which semval is to be set is greater than the
                    system imposed maximum.

     EPERM          cmd is equal to IPCRMID or IPCSET  and  the
                    effective  user  ID of the calling process is
                    not equal to that of super-user,  or  to  the
                    value of semperm.cuid or semperm.uid in the
                    data structure associated with semid.

     EFAULT         arg.buf points to an illegal address.

SEE ALSO
     intro(2), semget(2), semop(2).

DIAGNOSTICS
     Upon successful completion, the value  returned  depends  on
     cmd as follows:
          GETVAL    the value of semval
          GETPID    the value of (int) sempid
          GETNCNT   the value of semncnt
          GETZCNT   the value of semzcnt
          all others
                    a value of 0
     Otherwise, a value of -1 is returned and  errno  is  set  to
     indicate the error.






























                                                                3



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