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

FreeBSD Manual Pages

  
 
  

home | help
semop(2)							      semop(2)

Name
       semop - semaphore operations

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

       int semop (semid, sops, nsops)
       int semid;
       struct sembuf *sops[];
       int nsops;

Description
       The  system  call  is  used to atomically perform an array of semaphore
       operations on the set of	semaphores associated with the semaphore iden-
       tifier  specified  by  The sops is a pointer to the array of semaphore-
       operation structures.  The nsops	is the number of  such	structures  in
       the  array.  The	contents of each structure includes the	following mem-
       bers: short     sem_num;	 /* semaphore number */	short	  sem_op;   /*
       semaphore operation */ short	sem_flg;  /* operation flags */

       Each semaphore operation	specified by sem_op is performed on the	corre-
       sponding	semaphore specified by and sem_num.

       The sem_op specifies one	of three semaphore operations as follows:

       1.  If sem_op is	a negative integer, one	of the following occurs:

       o   If semval is	greater	than or	equal to the absolute value of sem_op,
	   the	absolute  value	of sem_op is subtracted	from semval.  For fur-
	   ther	information, see Also, if (sem_flg & SEM_UNDO)	is  true,  the
	   absolute  value  of sem_op is added to the calling process's	semadj
	   value for the specified semaphore.  For further information,	see

       o   If semval is	less than the absolute value of	sem_op and (sem_flg  &
	   IPC_NOWAIT) is true,	returns	immediately.

       o   If  semval is less than the absolute	value of sem_op	and (sem_flg &
	   IPC_NOWAIT )	is false, increments the semncnt associated  with  the
	   specified  semaphore	 and  suspend execution	of the calling process
	   until one of	the following occurs:

       o   If the semval becomes greater than or equal to the  absolute	 value
	   of  sem_op.	When this occurs, the value of semncnt associated with
	   the specified semaphore  is	decremented,  the  absolute  value  of
	   sem_op  is  subtracted  from	semval,	and if (sem_flg	& SEM_UNDO) is
	   true, the  absolute	value  of  sem_op  is  added  to  the  calling
	   process's semadj value for the specified semaphore.

	   The	for  which  the	 calling process is awaiting action is removed
	   from	the system.  For further information, see  When	 this  occurs,
	   errno is set	equal to EIDRM,	and a value of -1 is returned.

       The  calling process receives a signal that is to be caught.  When this
       occurs, the value of semncnt associated with the	specified semaphore is
       decremented,  and  the  calling process resumes execution in the	manner
       prescribed in

       2.  If sem_op is	a positive integer, the	value of sem_op	 is  added  to
       semval  and,  if	 (sem_flg  & SEM_UNDO) is true,	the value of sem_op is
       subtracted from the calling process's semadj value  for	the  specified
       semaphore.

       3.  If sem_op is	zero, one of the following occurs:

       o   If semval is	zero, returns immediately.

       o   If  semval is not equal to zero and (sem_flg	& IPC_NOWAIT) is true,
	   returns immediately.

       o   If semval is	not equal to zero and (sem_flg & IPC_NOWAIT) is	false,
	   increments  the semzcnt associated with the specified semaphore and
	   suspend execution of	the calling process, until one of the  follow-
	   ing occurs:

	   The	semval became zero, at which time the value of semzcnt associ-
	   ated	with the specified semaphore is	decremented.

	   The for which the calling process is	 awaiting  action  is  removed
	   from	 the  system.	When this occurs, errno	is set equal to	EIDRM,
	   and a value of -1 is	returned.

       The calling process receives a signal that is to	be caught.  When  this
       occurs, the value of semzcnt associated with the	specified semaphore is
       decremented, and	the calling process resumes execution  in  the	manner
       prescribed in

Upon  successful  completion, the value	of sempid for each semaphore specified
in the array pointed to	by sops	is set equal to	the process ID of the  calling
process.

Return Values
       Upon  successful	 completion,  a	 value of 0 is returned.  Otherwise, a
       value of	-1 is returned,	and errno is set to indicate the error.

Diagnostics
       The fails if any	of the following is true  for  any  of	the  semaphore
       operations specified by sops:

       [EINVAL]	      The sempid is not	a valid	semaphore identifier.

       [EFBIG]	      The  sem_num  is less than zero or greater than or equal
		      to the number of semaphores in the set associated	with

       [E2BIG]	      The nsops	is greater than	the system-imposed maximum.

       [EACCESS]      Operation	permission is denied to	the  calling  process.
		      For further information, see

       [EAGAIN]	      The  operation would result in suspension	of the calling
		      process, but (sem_flg & IPC_NOWAIT) is true.

       [ENOSPC]	      The limit	on the number of individual processes request-
		      ing an SEM_UNDO would be exceeded.

       [EINVAL]	      The  number of individual	semaphores for which the call-
		      ing process request a SEM_UNDO would exceed the limit.

       [ERANGE]	      An operation would cause a semval	to overflow  the  sys-
		      tem-imposed limit.

       [ERANGE]	      An  operation would cause	a semadj value to overflow the
		      system-imposed limit.

       [EFAULT]	      The sops points to an illegal address.

       [EINTR]	      The returns due to the receipt of	a signal.

       [EIDRM]	      The has been removed from	the system.

See Also
       execve(2), exit(2), fork(2), semctl(2), semget(2), signal(3)

								      semop(2)

Name | Syntax | Description | Return Values | Diagnostics | See Also

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=semop&sektion=2&manpath=ULTRIX+4.2>

home | help