semctl
SEMCTL(L)           Linux Programmer's Manual           SEMCTL(L)



NAME
       semctl - semaphore control operations

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

       int semctl(int semid, int semnum, int cmd, ...);

DESCRIPTION
       The  function semctl performs the control operation speci-
       fied by cmd on the semaphore set identified by  semid,  or
       on  the  semnum-th semaphore of that set.  (Semaphores are
       numbered starting at 0.)

       This function has three or four arguments. When there  are
       four,  the call is semctl(semid,semnum,cmd,arg); where the
       fourth argument arg has a type union semun defined as fol-
       lows:

       #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
       /* union semun is defined by including <sys/sem.h> */
       #else
       /* according to X/OPEN we have to define it ourselves */
       union semun {
             int val;                  /* value for SETVAL */
             struct semid_ds *buf;     /* buffer for IPC_STAT, IPC_SET */
             unsigned short *array;    /* array for GETALL, SETALL */
                                       /* Linux specific part: */
             struct seminfo *__buf;    /* buffer for IPC_INFO */
       };
       #endif

       Legal values for cmd are:

       IPC_STAT    Copy  info  from the semaphore set data struc-
                   ture into the structure pointed to by arg.buf.
                   The  argument  semnum is ignored.  The calling
                   process must have read  access  privileges  on
                   the semaphore set.

       IPC_SET     Write  the  values  of  some  members  of  the
                   semid_ds structure pointed to  by  arg.buf  to
                   the  semaphore  set  data  structure, updating
                   also its sem_ctime member.  Considered members
                   from the user supplied struct semid_ds pointed
                   to by arg.buf are

                        sem_perm.uid
                        sem_perm.gid
                        sem_perm.mode  /* only lowest 9-bits */

                   The effective user-ID of the  calling  process
                   must  be  that of the super-user, or match the
                   creator or owner of the  semaphore  set.   The
                   argument semnum is ignored.

       IPC_RMID    Immediately  remove  the semaphore set and its
                   data structures  awakening  all  waiting  pro-
                   cesses  (with an error return and errno set to
                   EIDRM).  The effective user-ID of the  calling
                   process  must  be  that  of the super-user, or
                   match the creator or owner  of  the  semaphore
                   set.  The argument semnum is ignored.

       GETALL      Return  semval  for  all semaphores of the set
                   into  arg.array.   The  argument   semnum   is
                   ignored.   The  calling process must have read
                   access privileges on the semaphore set.

       GETNCNT     The system call returns the value  of  semncnt
                   for  the  semnum-th semaphore of the set (i.e.
                   the  number  of  processes  waiting   for   an
                   increase of semval for the semnum-th semaphore
                   of the set).  The calling  process  must  have
                   read access privileges on the semaphore set.

       GETPID      The  system  call  returns the value of sempid
                   for the semnum-th semaphore of the  set  (i.e.
                   the  pid of the process that executed the last
                   semop call for the semnum-th semaphore of  the
                   set).   The  calling  process  must  have read
                   access privileges on the semaphore set.

       GETVAL      The system call returns the  value  of  semval
                   for  the  semnum-th semaphore of the set.  The
                   calling process must have read  access  privi-
                   leges on the semaphore set.

       GETZCNT     The  system  call returns the value of semzcnt
                   for the semnum-th semaphore of the  set  (i.e.
                   the  number of processes waiting for semval of
                   the semnum-th semaphore of the set  to  become
                   0).  The calling process must have read access
                   privileges on the semaphore set.

       SETALL      Set semval for all semaphores of the set using
                   arg.array,  updating also the sem_ctime member
                   of the semid_ds structure  associated  to  the
                   set.   Undo  entries  are  cleared for altered
                   semaphores in all processes.  Processes sleep-
                   ing  on  the  wait  queue are awakened if some
                   semval becomes 0 or increases.   The  argument
                   semnum  is  ignored.  The calling process must
                   have alter access privileges on the  semaphore
                   set.

       SETVAL      Set  the  value  of  semval to arg.val for the
                   semnum-th semaphore of the set, updating  also
                   the sem_ctime member of the semid_ds structure
                   associated  to  the  set.   Undo  entries  are
                   cleared  for  altered  semaphores  in all pro-
                   cesses.  Processes sleeping on the wait  queue
                   are awakened if semval becomes 0 or increases.
                   The calling process  must  have  alter  access
                   privileges on the semaphore set.

RETURN VALUE
       On  failure  semctl  returns  -1 with errno indicating the
       error.  Otherwise the system call  returns  a  nonnegative
       value depending on cmd as follows:

       GETNCNT    the value of semncnt.

       GETPID     the value of sempid.

       GETVAL     the value of semval.

       GETZCNT    the value of semzcnt.

       All other cmd values return 0 on success.

ERRORS
       On failure, errno will be set to one of the following:

       EACCES     The  calling  process has no access permissions
                  needed to execute cmd.

       EFAULT     The address pointed to by arg.buf or  arg.array
                  isn't accessible.

       EIDRM      The semaphore set was removed.

       EINVAL     Invalid value for cmd or semid.

       EPERM      The  argument cmd has value IPC_SET or IPC_RMID
                  but the calling process has insufficient privi-
                  leges to execute the command.

       ERANGE     The argument cmd has value SETALL or SETVAL and
                  the value to which semval has to  be  set  (for
                  some  semaphore  of  the set) is less than 0 or
                  greater than the implementation value SEMVMX.

NOTES
       The IPC_INFO, SEM_STAT and SEM_INFO control calls are used
       by the ipcs(s) program to provide information on allocated
       resources.  In the future these can be modified as  needed
       or moved to a proc file system interface.

       Various  fields  in  a  struct  semid_ds were shorts under
       Linux 2.2 and have become longs under Linux 2.4.  To  take
       advantage  of  this, a recompilation under glibc-2.1.91 or
       later should suffice.  (The kernel distinguishes  old  and
       new calls by a IPC_64 flag in cmd.)

       The  following  system  limit  on semaphore sets affects a
       semctl call:

       SEMVMX     Maximum value for semval: implementation depen-
                  dent (32767).

       For  greater  portability it is best to always call semctl
       with four arguments.

       Under Linux, the function semctl is not a system call, but
       is implemented via the system call ipc(c).

CONFORMING TO
       SVr4,  SVID.   SVr4 documents more error conditions EINVAL
       and EOVERFLOW.

SEE ALSO
       ipc(c), shmget(t), shmat(t), shmdt(t), ipc(c)



Linux 2.4.1                 2001-12-21                  SEMCTL(L)