semop man page on DigitalUNIX

Printed from http://www.polarhome.com/service/man/?qf=semop&af=0&tf=2&of=DigitalUNIX

semop(2)							      semop(2)

NAME
       semop - Perform semaphore operations

SYNOPSIS
       #include <sys/sem.h>

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

       The  following  declaration  of the nsops parameter does not conform to
       current standards and is supported  only	 for  backward	compatibility:
       u_int nsops

       Application  developers	may  want  to  specify #include statements for
       <sys/types.h> and <sys/ipc.h> before the one for	 <sys/sem.h>  if  pro‐
       grams  are  being  developed  for  multiple  platforms.	The additional
       #include statements are not required on Tru64 UNIX systems or by ISO or
       XSH  specifications, but may be required on other vendors' systems that
       conform to these standards.

STANDARDS
       Interfaces documented on this reference page conform to industry	 stan‐
       dards as follows:

       semop(): XSH4.0, XSH4.2, XSH5.0

       Refer  to  the  standards(5)  reference page for more information about
       industry standards and associated tags.

PARAMETERS
       Specifies the ID of the semaphore  set.	 Points	 to  the  user-defined
       array  of sembuf structures that contain the semaphore operations.  The
       number of sembuf structures in the array.

DESCRIPTION
       The semop() function performs operations on the semaphores in the spec‐
       ified  semaphore	 set. The semaphore operations are defined in the sops
       array. The sops array contains nsops elements, each of which is	repre‐
       sented by a sembuf structure.

       The sembuf structure (from <sys/sem.h>) is shown here:

       struct sembuf {
	       u_short	   sem_num;
	       short	   sem_op;
	       short	   sem_flg; };

       The fields in the sembuf structure are defined as follows: Specifies an
       individual semaphore within the semaphore set.  Specifies the operation
       to  perform on the semaphore.  Specifies various options for the opera‐
       tions. The possible values are: Instructs  the  kernel  to  adjust  the
       process's  adjust-on-exit  value	 for  a	 modified  semaphore. When the
       process exits, the kernel uses this value to restore the	 semaphore  to
       the  value  it had before any modifications by the process. This option
       is used to prevent semaphore  locking  by  a  process  that  no	longer
       exists.	 Instructs  the	 kernel	 to  return  an	 error	condition if a
       requested operation would cause the process to  sleep.  If  the	kernel
       returns	an error condition, none of the requested semaphore operations
       are performed.

       The sem_op operation is specified as a  negative	 integer,  a  positive
       integer,	 or  0 (zero). The effects of these three values are described
       below.

       If sem_op is a negative integer and the calling process has modify per‐
       mission,	 the  semop() function does one of the following: If the sema‐
       phore's current value (in semval) is equal to or greater than the abso‐
       lute  value  of sem_op, the absolute value of sem_op is subtracted from
       semval. If SEM_UNDO is set, the absolute value of sem_op	 is  added  to
       the calling process' adjust-on-exit value for the semaphore.  If semval
       is less than the absolute  value	 of  sem_op  and  IPC_NOWAIT  is  set,
       semop() returns immediately.  If semval is less than the absolute value
       of sem_op and IPC_NOWAIT is not set, semop() increments the semaphore's
       semncnt value and suspends the calling process.

       If  the	process	 is  suspended,	 it  sleeps until one of the following
       occurs: The semval value becomes equal to or greater than the  absolute
       value  of sem_op. In this case, the semaphore's semncnt value is decre‐
       mented; the absolute value of sem_op is subtracted from semval; and, if
       SEM_UNDO	 is  set, the absolute value of sem_op is added to the calling
       process's adjust-on-exit value for the semaphore.   The	semaphore  set
       (specified by semid) is removed from the system. In this case, errno is
       set equal to [EIDRM] and a value of  -1	is  returned  to  the  calling
       process.	 The calling process catches a signal. In this case, the sema‐
       phore's semncnt value is decremented, and the calling  process  resumes
       execution as directed by the sigaction() function.

       If sem_op is a positive integer and the calling process has modify per‐
       mission, semop() adds the sem_op value to the semaphore's current  sem‐
       val  value. If SEM_UNDO is set, the sem_op value is subtracted from the
       calling process's adjust-on-exit value for the semaphore.

       If sem_op is 0 (zero) and the  calling  process	has  read  permission,
       semop()	does  one  of  the  following: If semval is 0, semop() returns
       immediately.  If semval is not  equal  to  0  and  IPC_NOWAIT  is  set,
       semop()	returns	 immediately.	If  semval  is	not  equal  to	0  and
       IPC_NOWAIT is not set, semop() increments the semaphore's semzcnt value
       and suspends the calling process.

       If  the	process	 is  suspended,	 it  sleeps until one of the following
       occurs: The semval value becomes 0 (zero).  In  this  case,  the	 sema‐
       phore's	semncnt value is decremented.  The semaphore set (specified by
       semid) is removed from the system. In this case, errno is set equal  to
       [EIDRM]	and  a	value  of  -1 is returned to the calling process.  The
       calling process catches a signal. In this case, the semaphore's semncnt
       value  is  decremented,	and  the  calling process resumes execution as
       directed by the sigaction() function.

       The calling process must have read (sense) or write (alter)  permission
       to the semaphore set for all access control policies for each specified
       operation.  If any operation accesses the semaphore set in a  way  that
       is  not allowed according to one of the access control policies, access
       is denied.

NOTES
       [Tru64 UNIX]  Semaphore operations are performed atomically;  that  is,
       either  all  of the requested operations are performed, or none are. If
       the kernel goes to sleep while doing the operations, it restores all of
       the semaphores in the set to their previous values, at the start of the
       semop() function.

       The librt library contains alternative interfaces for interprocess com‐
       munication.  The names of these routines adhere to the format sem_* and
       their reference pages are listed in SEE ALSO.

RETURN VALUES
       Upon successful completion, the semop() function returns a value	 of  0
       (zero) and the sempid value for each semaphore that is operated upon is
       set to the process ID of the calling process.

       If the semop() function fails, a value of -1 is returned and  errno  is
       set to indicate the error.

ERRORS
       The semop() function sets errno to the specified values for the follow‐
       ing conditions: The nsops parameter is greater than the	system-defined
       maximum.	  The  calling	process does not have the required permission.
       The process does not have read or write access permission to the	 sema‐
       phore  set  with	 respect to all access control policies.  Both sem_flg
       and IPC_NOWAIT are true, but the requested operation  would  cause  the
       calling	process	 to  be	 suspended.   [Tru64 UNIX]  Indicates that the
       requested address is in some way invalid, for example, out  of  bounds.
       The  sem_num value is greater than or equal to the number of semaphores
       in the set associated with semid.  The semaphore ID  specified  by  the
       semid parameter has been removed from the system.  The semop() function
       was interrupted by a signal.  One of the following conditions  applies:
       The  semid value is not a valid semaphore ID.  The number of semaphores
       for which SEM_UNDO  is  requested  exceeds  the	system-defined	limit.
       [Tru64  UNIX]  The sem_num value is less than zero.  The system-defined
       limit on the number of processes using SEM_UNDO was exceeded.  An oper‐
       ation caused a semval value to overflow the system-defined limit, or an
       operation caused an adjust-on-exit value to exceed  the	system-defined
       limit.	[Tru64 UNIX]  The requested operation is not supported by this
       implementation.

SEE ALSO
       Functions:   exec(2),   exit(2),	  fork(2),    semctl(2),    semget(2),
       sem_close(3), sem_destroy(3), sem_getvalue(3),

       sem_init(3), sem_open(3), sem_post(3), sem_unlink(3), sem_wait(3)

       Data Structures: semid_ds(4)

       Standards: standards(5)

								      semop(2)
[top]

List of man pages available for DigitalUNIX

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net