Seth Woolley's Man Viewer

semctl(2) - semctl, semctl - semaphore control operations - man 2 semctl

([section] manual, -k keyword, -K [section] search, -f whatis)
man plain no title

SEMCTL(2)                  Linux Programmer's Manual                 SEMCTL(2)



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 specified by cmd on
       the semaphore set(7,n,1 builtins) 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 follows:

       #if(3,n) 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(1,5,n)  from  the semaphore set(7,n,1 builtins) data structure into the
                   structure pointed to by arg.buf.  The  argument  semnum  is
                   ignored.   The calling process must have read(2,n,1 builtins) access(2,5) privi-
                   leges 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(7,n,1 builtins) 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(7,n,1 builtins) and  its  data  struc-
                   tures awakening all waiting processes (with an error(8,n) return
                   and errno set(7,n,1 builtins) 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(7,n,1 builtins) into arg.array.
                   The argument semnum is ignored.  The calling  process  must
                   have read(2,n,1 builtins) access(2,5) privileges on the semaphore set.

       GETNCNT     The  system  call returns the value of semncnt for the sem-
                   num-th semaphore of the set(7,n,1 builtins) (i.e. the number  of  processes
                   waiting  for  an increase of semval for the semnum-th sema-
                   phore of the set(7,n,1 builtins)).  The  calling  process  must  have  read(2,n,1 builtins)
                   access(2,5) privileges on the semaphore set.

       GETPID      The  system  call  returns the value of sempid for the sem-
                   num-th semaphore of the set(7,n,1 builtins) (i.e. the pid  of  the  process
                   that  executed  the last semop call for the semnum-th sema-
                   phore of the set(7,n,1 builtins)).  The  calling  process  must  have  read(2,n,1 builtins)
                   access(2,5) privileges on the semaphore set.

       GETVAL      The  system  call  returns the value of semval for the sem-
                   num-th semaphore of the set.  The calling process must have
                   read(2,n,1 builtins) access(2,5) privileges on the semaphore set.

       GETZCNT     The  system  call returns the value of semzcnt for the sem-
                   num-th semaphore of the set(7,n,1 builtins) (i.e. the number  of  processes
                   waiting for semval of the semnum-th semaphore of the set(7,n,1 builtins) to
                   become 0).  The calling process must have read(2,n,1 builtins) access(2,5) priv-
                   ileges on the semaphore set.

       SETALL      Set  semval  for all semaphores of the set(7,n,1 builtins) using arg.array,
                   updating also the sem_ctime member of the  semid_ds  struc-
                   ture  associated  to the set.  Undo entries are cleared for
                   altered semaphores in(1,8) all processes.  Processes sleeping on
                   the  wait  queue(1,3)  are  awakened if(3,n) some semval becomes 0 or
                   increases.  The argument semnum is  ignored.   The  calling
                   process  must have alter access(2,5) privileges on the semaphore
                   set.

       SETVAL      Set the value of semval to arg.val for the semnum-th  sema-
                   phore of the set(7,n,1 builtins), updating also the sem_ctime member of the
                   semid_ds structure associated to the set.  Undo entries are
                   cleared for altered semaphores in(1,8) all processes.  Processes
                   sleeping on the wait queue(1,3) are awakened if(3,n) semval becomes 0
                   or  increases.   The calling process must have alter access(2,5)
                   privileges on the semaphore set.

RETURN VALUE
       On failure semctl returns -1 with errno indicating the  error.   Other-
       wise  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(7,n,1 builtins) to one of the following:

       EACCES     The argument cmd has one of the values GETALL, GETPID,  GET-
                  VAL, GETNCNT, GETZCNT, IPC_STAT, SEM_STAT, SETALL, or SETVAL
                  and the calling process does not have the  required  permis-
                  sions   on   the   semaphore  set(7,n,1 builtins)  and  does  not  have  the
                  CAP_IPC_OWNER capability.

       EFAULT     The address pointed to by arg.buf or arg.array isn't  acces-
                  sible.

       EIDRM      The semaphore set(7,n,1 builtins) was removed.

       EINVAL     Invalid value for cmd or semid.

       EPERM      The  argument  cmd has value IPC_SET or IPC_RMID but the but
                  the effective user ID of the calling process is not the cre-
                  ator  (as  found in(1,8) sem_perm.cuid) or the owner (as found in(1,8)
                  sem_perm.uid) of the semaphore set(7,n,1 builtins), and the process does not
                  have the CAP_SYS_ADMIN capability.

       ERANGE     The argument cmd has value SETALL or SETVAL and the value to
                  which semval has to be set(7,n,1 builtins) (for some semaphore of  the  set(7,n,1 builtins))
                  is  less(1,3)  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(8)  program to provide information on allocated resources.  In the
       future these can be modified as needed or moved to a proc(5,n)  file(1,n)  system
       interface.

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

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

       SEMVMX     Maximum value for semval: implementation dependent  (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  imple-
       mented via the system call ipc(2,5)(2).

CONFORMING TO
       SVr4, SVID.  SVr4 documents more error(8,n) conditions EINVAL and EOVERFLOW.

SEE ALSO
       ipc(2,5)(2), semget(2), semop(2), ipc(2,5)(5), capabilities(7)



Linux 2.6.7                       2004-06-17                         SEMCTL(2)

References for this manual (incoming links)