Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ () — Coherent 3.1.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought


semctl()               COHERENT System Call              semctl()




Control semaphore operations

#include <sys/sem.h>
semctl(semid, semnum, cmd, arg)
int semid, cmd, semnum;
union semun {
        int val;
        struct semid_ds *buf;
        unsigned short array[];
} arg;

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:

GETVAL
Return the value of semval (READ).

SETVAL
Set the value of semval to arg.val (ALTER).

GETPID
Return the value of 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).

The following cmds are also available:

IPC_STAT   Place the  current value  of each  member of  the data
          structure  associated  with  semid into  the  structure
          pointed to by arg.buf (READ).

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

IPC_RMID  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:


     GETVAL    The value of semval.
     GETPID    The value of sempid.
     GETNCNT   The value of semncnt.
     GETZCNT   The value of semzcnt.
     All othersZero


Otherwise,  semctl returns  -1 and sets  errno 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


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