Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OSF1-V5.1-alpha)
Apropos / Subsearch:
optional field

semid_ds(4)							  semid_ds(4)


  semid_ds - Defines a semaphore set


  #include <&lt;sys/sem.h>&gt;

  struct semid_ds{
	  struct ipc_perm sem_perm;
	  struct sem *sem_base;
	  u_short sem_nsems;
	  time_t sem_otime;
	  time_t sem_ctime;


  The semid_ds structure defines a semaphore set associated with a semaphore
  ID.  There is	one semaphore set per semaphore	ID.

  A semaphore set is implemented as an array of	sem_nsems semaphores, with
  sem_base pointing to the first semaphore in the set.

  The IPC permissions for a semaphore set are implemented in a separate, but
  associated, ipc_perm structure.

  A semaphore set is created indirectly	by the semget()	call.  If semget() is
  called with a	non-existent semaphore ID, the kernel allocates	a new
  semid_ds structure, initializes it, and returns the semaphore	ID that	is to
  be associated	with the semaphore set.

  The following	sections describe the fields in	the semid_ds structure and
  show the associated ipc_perm and sem_perm structures.


  sem_perm  The	ipc_perm structure that	defines	permissions for	semaphore

  sem_base  A pointer to the first semaphore in	the set.  Individual sema-
	    phores are defined using the sem structure.

  sem_nsems The	number of semaphores in	the set.  Each semaphore in the	set
	    is referenced by a unique integer.	A semaphore number is some-
	    times referred to as sem_num, but this is not a field carried in
	    any	of the relevant	data structures.  Semaphore numbers run
	    sequentially from zero to sem_nsems-1.

  sem_otime The	time of	the last semop() operation on the set.

  sem_ctime The	time of	the last semctl() operation that changed a member of
	    the	ipc_perm structure specified by	the sem_perm field.


  The sem_perm field identifies	the associated ipc_perm	structure that
  defines the permissions for operations on the	semaphore set.	The ipc_perm
  structure (from the sys/ipc.h	header file) is	as follows:

       struct ipc_perm {
	       ushort	 uid;	     /*	owner's	user id		   */
	       ushort	 gid;	     /*	owner's	group id	   */
	       ushort	 cuid;	     /*	creator's user id	   */
	       ushort	 cgid;	     /*	creator's group	id	   */
	       ushort	 mode;	     /*	access modes		   */
	       ushort	 seq;	     /*	slot usage sequence number */
	       key_t	 key;	     /*	key			   */

  The mode field is a 9-bit field that contains	the permissions	for semaphore
  operations.  The first three bits identify owner permissions;	the second
  three	bits identify group permissions; and the last three bits identify
  other	permissions.  In each group, the first bit indicates read permission;
  the second bit indicates write permission; and the third bit is not used.

  Individual semaphores	are implemented	with the following sem structure
  (defined in the sys/sem.h header file):

       struct sem {
	       u_short	 semval;
	       short	 sempid;
	       u_short	 semncnt;
	       u_short	 semzcnt;

  The fields in	the sem	structure are as follows:

  semval    A nonnegative integer that is the current value of the semaphore.

  sempid    The	process	ID of the last process to perform an operation on the

  semncnt   The	number of processes that are currently suspended while wait-
	    ing	for an operation to increment the current semval value.

  semzcnt   The	number of processes that are currently suspended while wait-
	    ing	for semval to go to zero.


  Functions: semctl(2),	semget(2), semop(2)