semget

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
SEMGET(2)		  Linux Programmer’s Manual		    SEMGET(2)



NAME
       semget - get a semaphore set identifier

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

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

DESCRIPTION
       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
       zero).

       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)
       system 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 argument in the open(2) or creat(2) system calls (though the exe-
       cute  permissions are not meaningful for semaphores, and write permis-
       sions 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-
       fied.

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

ERRORS
       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 IPC_CREAT and IPC_EXCL.

       ENOENT	  No semaphore set exists for key and semflg wasn’t asserting
		  IPC_CREAT.

       EINVAL	  nsems	 is less than 0 or greater than the limit on the num-
		  ber  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 sys-
		  tem wide maximum number of semaphores	 (SEMMNS),  would  be
		  exceeded.

NOTES
       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 call:

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

       SEMMSL	  Maximum  number  of  semaphores  per	semid: implementation
		  dependent (500 currently).

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

BUGS
       The  name  choice  IPC_PRIVATE  was perhaps unfortunate, IPC_NEW would
       more clearly show its function.

       The data structure associated with each semaphore  in  the  set	isn’t
       initialized  by	the  system  call.  In order to initialize those data
       structures, one has to execute a subsequent call to semctl(2) to	 per-
       form a SETVAL or a SETALL command on the semaphore set.

CONFORMING TO
       SVr4,  SVID.  SVr4 documents additional error conditions EFBIG, E2BIG,
       EAGAIN, ERANGE, EFAULT.

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



Linux 2.5			  2002-01-04			    SEMGET(2)