Man Linux: Main Page and Category List

NAME

       semctl - XSI semaphore control operations

SYNOPSIS

       #include <sys/sem.h>

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

DESCRIPTION

       The  semctl()  function  operates  on  XSI  semaphores  (see  the  Base
       Definitions volume of IEEE Std 1003.1-2001, Section  4.15,  Semaphore).
       It is unspecified whether this function interoperates with the realtime
       interprocess communication facilities defined in Realtime .

       The  semctl()  function  provides  a  variety  of   semaphore   control
       operations  as  specified  by  cmd. The fourth argument is optional and
       depends upon the operation requested. If required, it is of type  union
       semun, which the application shall explicitly declare:

              union semun {
                  int val;
                  struct semid_ds *buf;
                  unsigned short  *array;
              } arg;

       The  following  semaphore  control  operations  as specified by cmd are
       executed with respect to the semaphore specified by semid  and  semnum.
       The  level of permission required for each operation is shown with each
       command; see XSI Interprocess Communication . The  symbolic  names  for
       the values of cmd are defined in the <sys/sem.h> header:

       GETVAL Return  the  value  of  semval;  see  <sys/sem.h>. Requires read
              permission.

       SETVAL Set the value of semval to arg.val, where arg is  the  value  of
              the   fourth   argument   to  semctl().  When  this  command  is
              successfully executed, the semadj  value  corresponding  to  the
              specified  semaphore in all processes is cleared. Requires alter
              permission; see XSI Interprocess Communication .

       GETPID Return the value of sempid. Requires read permission.

       GETNCNT
              Return the value of semncnt. Requires read permission.

       GETZCNT
              Return the value of semzcnt. Requires read permission.

       The following values of cmd operate  on  each  semval  in  the  set  of
       semaphores:

       GETALL Return  the  value of semval for each semaphore in the semaphore
              set and place into the array pointed to by arg.array, where  arg
              is the fourth argument to semctl().  Requires read permission.

       SETALL Set  the value of semval for each semaphore in the semaphore set
              according to the array pointed to by arg.array, where arg is the
              fourth  argument  to semctl(). When this command is successfully
              executed, the semadj  values  corresponding  to  each  specified
              semaphore   in   all  processes  are  cleared.   Requires  alter
              permission.

       The following values of cmd are also available:

       IPC_STAT
              Place the current value of each  member  of  the  semid_ds  data
              structure associated with semid into the structure pointed to by
              arg.buf, where arg is  the  fourth  argument  to  semctl().  The
              contents  of this structure are defined in <sys/sem.h>. Requires
              read permission.

       IPC_SET
              Set the value of the following  members  of  the  semid_ds  data
              structure associated with semid to the corresponding value found
              in the structure pointed to by arg.buf, where arg is the  fourth
              argument to semctl():

              sem_perm.uid
              sem_perm.gid
              sem_perm.mode

       The  mode bits specified in IPC General Description are copied into the
       corresponding bits of the sem_perm.mode  associated  with  semid.   The
       stored values of any other bits are unspecified.

       This  command  can  only be executed by a process that has an effective
       user ID equal to either that of a process with  appropriate  privileges
       or  to  the value of sem_perm.cuid or sem_perm.uid in the semid_ds data
       structure associated with semid.

       IPC_RMID
              Remove the semaphore identifier  specified  by  semid  from  the
              system  and  destroy  the  set  of  semaphores and semid_ds data
              structure associated with it. This command can only be  executed
              by  a process that has an effective user ID equal to either that
              of a process with appropriate privileges  or  to  the  value  of
              sem_perm.cuid  or  sem_perm.uid  in  the semid_ds data structure
              associated with semid.

RETURN VALUE

       If successful, the  value  returned  by  semctl()  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 others
              0.

       Otherwise,  semctl()  shall  return  -1  and  set errno to indicate the
       error.

ERRORS

       The semctl() function shall fail if:

       EACCES Operation permission is denied to the calling process;  see  XSI
              Interprocess Communication .

       EINVAL The  value  of semid is not a valid semaphore identifier, or the
              value of semnum is less than 0  or  greater  than  or  equal  to
              sem_nsems, or the value of cmd is not a valid command.

       EPERM  The  argument  cmd  is  equal  to  IPC_RMID  or  IPC_SET and the
              effective user ID of the calling process is not equal to that of
              a process with appropriate privileges and it is not equal to the
              value of sem_perm.cuid or sem_perm.uid  in  the  data  structure
              associated with semid.

       ERANGE The  argument  cmd is equal to SETVAL or SETALL and the value to
              which semval is to be set is  greater  than  the  system-imposed
              maximum.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       The  fourth parameter in the SYNOPSIS section is now specified as "..."
       in order to avoid a clash with the ISO C standard when referring to the
       union semun (as defined in Issue 3) and for backwards-compatibility.

       The   POSIX  Realtime  Extension  defines  alternative  interfaces  for
       interprocess communication. Application developers who need to use  IPC
       should design their applications so that modules using the IPC routines
       described in XSI Interprocess Communication can be easily  modified  to
       use the alternative interfaces.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       XSI  Interprocess  Communication  ,  Realtime  ,  semget()  , semop() ,
       sem_close() , sem_destroy() , sem_getvalue() , sem_init() ,  sem_open()
       ,  sem_post() , sem_unlink() , sem_wait() , the Base Definitions volume
       of IEEE Std 1003.1-2001, <sys/sem.h>

COPYRIGHT

       Portions of this text are reprinted and reproduced in  electronic  form
       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
       -- Portable Operating System Interface (POSIX),  The  Open  Group  Base
       Specifications  Issue  6,  Copyright  (C) 2001-2003 by the Institute of
       Electrical and Electronics Engineers, Inc and The Open  Group.  In  the
       event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard
       is  the  referee document. The original Standard can be obtained online
       at http://www.opengroup.org/unix/online.html .