

semctl()               COHERENT System Call              semctl()




Control semaphore operations

#include <sys/sem.h>
sseemmccttll(_s_e_m_i_d, _s_e_m_n_u_m, _c_m_d, _a_r_g)
iinntt _s_e_m_i_d, _c_m_d, _s_e_m_n_u_m;
uunniioonn sseemmuunn {
        iinntt _v_a_l;
        ssttrruucctt sseemmiidd_ddss *_b_u_f;
        uunnssiiggnneedd sshhoorrtt _a_r_r_a_y[];
} _a_r_g;

semctl controls a  variety of semaphore operations.  cmd sets the
operation to  be performed; the following  cmds are executed with
respect to the semaphore specified by semid and semnum:

GGEETTVVAALL
Return the value of sseemmvvaall (READ).

SSEETTVVAALL
Set the value of sseemmvvaall to _a_r_g._v_a_l (ALTER).

GGEETTPPIIDD
Return the value of sseemmppiidd (READ).

GGEETTNNCCNNTT
Return the value of sseemmnnccnntt (READ).

GGEETTZZCCNNTT
Return the value of sseemmzzccnntt (READ).

The following cmds  return and set, respectively, every semval in
the set of semaphores.

GGEETTAALLLL     Place  semvals  into  array  pointed to  by  _a_r_g._a_r_r_a_y
          (READ).

SSEETTAALLLL     Set  semvals  according to  the  array  pointed to  by
          _a_r_g._a_r_r_a_y (ALTER).

The following cmds are also available:

IIPPCC_SSTTAATT   Place the  current value  of each  member of  the data
          structure  associated  with  semid into  the  structure
          pointed to by _a_r_g._b_u_f (READ).

IIPPCC_SSEETT    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:

          sem_perm.uid
          sem_perm.gid
          sem_perm.mode /* only low 9 bits */

          This command can only be executed by a process that has


COHERENT Lexicon                                           Page 1




semctl()               COHERENT System Call              semctl()



          an effective  user identifier  equal to either  that of
          superuser or  to the value of  sem_perm.uid in the data
          structure associated with semid.

IIPPCC_RRMMIIDD  Remove  the system  identifier specified by  semid from
          the system  and destroy the set  of semaphores and data
          structure associated with it.  This cmd can only be ex-
          ecuted by  a process that  has an effective  user iden-
          tifier equal  to either  that of  super user or  to the
          value of sem_perm.uid  in the data structure associated
          with semid.

semctl will fail if one or more of the following are true:

*  semid is not a valid semaphore identifier [EINVAL].

*  semnum is less than zero or greater than sem_nsems [EINVAL].

*  cmd is not a valid command [EINVAL].

*   Operation  permission  is  denied  to  the  calling  process.
   [EACCES]

*  cmd is SETVAL or SETALL and the value to which semval is to be
   set is greater than the system imposed maximum [ERANGE].

*  cmd  is equal  to IPC_RMID or  IPC_SET and the  effective user
   identifier of the calling process  is not equal to that of su-
   peruser and  it is not  equal to the value  of sem_perm.uid in
   the data structure associated with semid [EPERM].

*  arg.buf points to an illegal address [EFAULT].

***** Return Value *****

Upon successful completion,  the value returned depends on cmd as
follows:


     GGEETTVVAALL    The value of sseemmvvaall.
     GGEETTPPIIDD    The value of sseemmppiidd.
     GGEETTNNCCNNTT   The value of sseemmnnccnntt.
     GGEETTZZCCNNTT   The value of sseemmzzccnntt.
     All othersZero


Otherwise,  semctl returns  -1 and sets  eerrrrnnoo to  an appropriate
value.

***** Files *****

/usr/include/sys/ipc.h
/usr/include/sys/sem.h
/dev/sem
/drv/sem


COHERENT Lexicon                                           Page 2




semctl()               COHERENT System Call              semctl()




***** See Also *****

COHERENT system calls, sem, semget(), semop()

***** Notes *****

To  improve  portability,  the  COHERENT  system  implements  the
semaphore functions  as a device driver rather  than as an actual
system call.















































COHERENT Lexicon                                           Page 3


