*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Linux man pages -> semctl (2)              
Title
Content
Arch
Section
 

SEMCTL(2)

Contents


NAME    [Toc]    [Back]

       semctl - semaphore control operations

SYNOPSIS    [Toc]    [Back]

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

       #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 int *array;  /* array for GETALL, SETALL */
	       struct seminfo *__buf;	   /* buffer for IPC_INFO */
       };
       #endif

       int semctl (int semid, int semnum, int cmd, union semun arg)

DESCRIPTION    [Toc]    [Back]

       The  function  performs	the  control operation specified by cmd on the
       semaphore set (or on the semnum-th semaphore of the set) identified  by
       semid.	The  first  semaphore of the set is indicated by a value 0 for
       semnum.


       Legal values for cmd are

       IPC_STAT    Copy info from the semaphore set data  structure  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	calling  process  effective  user-ID must be one among
		   super-user, creator or owner of  the  semaphore  set.   The
		   argument semnum is ignored.

       IPC_RMID    Remove  immediately	the  semaphore set and its data structures
 awakening all waiting processes (with an error return
		   and	errno  set  to	EIDRM).  The calling process effective
		   user-ID must be one among super-user, 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 sem-
		   num-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 sem-
		   num-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 sem-
		   num-th semaphore of the set.  The calling process must have
		   read access privileges on the semaphore set.

       GETZCNT	   The	system	call returns the value of semzcnt for the sem-
		   num-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 sleeping 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  entry  is
		   cleared  for altered semaphore in all processes.  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    [Toc]    [Back]

       On fail the system call 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.

ERRORS    [Toc]    [Back]

       For a failing return, errno will be set to one among the following values:


       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 effective user-ID has insufficient privileges 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    [Toc]    [Back]

       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  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 dependent  (32767).

CONFORMING TO    [Toc]    [Back]

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

SEE ALSO    [Toc]    [Back]

      
      
       ipc(5), shmget(2), shmat(2), shmdt(2)



Linux 2.4.1			  2001-02-18			     SEMCTL(2)
[ Back ]
 Similar pages
Name OS Title
semctl FreeBSD control operations on a semaphore set
semctl Tru64 Perform semaphore control operations
semop IRIX semaphore operations
semop OpenBSD semaphore operations
semop Linux semaphore operations
semtimedop HP-UX semaphore operations
semop HP-UX semaphore operations
semop NetBSD semaphore operations
sem_close FreeBSD named semaphore operations
sem_open FreeBSD named semaphore operations
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service