Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ semctl(2) — Atari System V ue12

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(2)

semget(2)

semop(2)





   semctl(2)                                                         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 semaphore
         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 semval 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.

         The following cmds are also available:




   7/91                                                                 Page 1









   semctl(2)                                                         semctl(2)


               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 structure pointed to by arg.buf:

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

                          This command can 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.

               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 which semval
                        is to be set is greater than the system imposed
                        maximum.





   Page 2                                                                 7/91









   semctl(2)                                                         semctl(2)


         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.































   7/91                                                                 Page 3





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