Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SEMGET(2)		   Linux Programmer's Manual		     SEMGET(2)

       semget -	get a semaphore	set identifier

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

       int semget(key_t	key, int nsems,	int semflg);

       This  function returns the semaphore set	identifier associated with the
       argument	key.  A	new set	of nsems semaphores is created if key has  the
       value  IPC_PRIVATE or if	no existing semaphore set is associated	to key
       and IPC_CREAT is	asserted in semflg (i.e.   semflg  &  IPC_CREAT	 isn't

       The  presence  in semflg	of the fields IPC_CREAT	and IPC_EXCL plays the
       same role, with respect to the existence	of the semaphore set,  as  the
       presence	of O_CREAT and O_EXCL in the mode argument of the open(2) sys-
       tem call: i.e.  the  semget  function  fails  if	 semflg	 asserts  both
       IPC_CREAT and IPC_EXCL and a semaphore set already exists for key.

       Upon  creation,	the low-order 9	bits of	the argument semflg define the
       access permissions (for owner, group and	others)	for the	semaphore set.
       These  bits have	the same format, and the same meaning, as the mode ar-
       gument in the open(2) or	creat(2) system	calls (though the execute per-
       missions	 are not meaningful for	semaphores, and	write permissions mean
       permission to alter semaphore values).

       When creating a new semaphore set,  semget  initializes	the  semaphore
       set's associated	data structure semid_ds	as follows:

	      sem_perm.cuid  and sem_perm.uid are set to the effective user-ID
	      of the calling process.

	      sem_perm.cgid and	sem_perm.gid are set to	the effective group-ID
	      of the calling process.

	      The low-order 9 bits of sem_perm.mode are	set to the low-order 9
	      bits of semflg.

	      sem_nsems	is set to the value of nsems.

	      sem_otime	is set to 0.

	      sem_ctime	is set to the current time.

       The argument nsems can be 0 (a don't care) when a semaphore set is  not
       being created.  Otherwise nsems must be greater than 0 and less than or
       equal to	the maximum number of semaphores per semaphore set (SEMMSL).

       If the semaphore	set already exists, the	access permissions  are	 veri-

       If successful, the return value will be the semaphore set identifier (a
       nonnegative integer), otherwise -1 is returned, with  errno  indicating
       the error.

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

       EACCES	  A semaphore set exists for key, but the calling process does
		  not have permission to access	the set.

       EEXIST	  A semaphore set exists for key and semflg was	asserting both

       ENOENT	  No  semaphore	set exists for key and semflg wasn't asserting

       EINVAL	  nsems	is less	than 0 or greater than the limit on the	number
		  of semaphores	per semaphore set (SEMMSL), or a semaphore set
		  corresponding	to key already exists,	and  nsems  is	larger
		  than the number of semaphores	in that	set.

       ENOMEM	  A  semaphore	set  has  to be	created	but the	system has not
		  enough memory	for the	new data structure.

       ENOSPC	  A semaphore set has to be created but	the system  limit  for
		  the maximum number of	semaphore sets (SEMMNI), or the	system
		  wide maximum number of semaphores  (SEMMNS),	would  be  ex-

       IPC_PRIVATE isn't a flag	field but a key_t type.	 If this special value
       is used for key,	the system call	ignores	everything but the low-order 9
       bits of semflg and creates a new	semaphore set (on success).

       The followings are limits on semaphore set resources affecting a	semget

       SEMMNI	  System wide maximum number of	semaphore sets:	policy	depen-

       SEMMSL	  Maximum  number  of semaphores per semid: implementation de-
		  pendent (500 currently).

       SEMMNS	  System wide maximum number of	semaphores: policy  dependent.
		  Values greater than SEMMSL * SEMMNI makes it irrelevant.

       Use of IPC_PRIVATE doesn't inhibit to other processes the access	to the
       allocated semaphore set.

       There is	currently no intrinsic way for a process to  ensure  exclusive
       access  to  a  semaphore	set.  Asserting	both IPC_CREAT and IPC_EXCL in
       semflg only ensures (on success)	that a new semaphore set will be  cre-
       ated, it	doesn't	imply exclusive	access to the semaphore	set.

       The data	structure associated with each semaphore in the	set isn't ini-
       tialized	by the system call.  In	order to initialize those data	struc-
       tures,  one  has	to execute a subsequent	call to	semctl(2) to perform a
       SETVAL or a SETALL command on the semaphore set.

       SVr4, SVID.  SVr4 documents additional error conditions	EFBIG,	E2BIG,

       ftok(3),	ipc(5),	semctl(2), semop(2)

Linux 2.5			  2002-01-04			     SEMGET(2)


Want to link to this manual page? Use this URL:

home | help