trusty (3) semctl.3posix.gz

Provided by: manpages-posix-dev_2.16-1_all bug

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>

       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 .