*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> semop (2)              
Title
Content
Arch
Section
 

semop(2)

Contents


NAME    [Toc]    [Back]

       semop - Perform semaphore operations

SYNOPSIS    [Toc]    [Back]

       #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  programs 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    [Toc]    [Back]

       Interfaces  documented  on  this reference page conform to
       industry standards 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    [Toc]    [Back]

       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    [Toc]    [Back]

       The semop() function performs operations on the semaphores
       in  the  specified semaphore set. The semaphore operations
       are defined in the sops array.  The  sops  array  contains
       nsops  elements,  each of which is represented 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 operations. 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 permission, the semop() function  does  one  of
       the  following:  If the semaphore's current value (in semval)
 is equal to or greater than  the  absolute  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 decremented; 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 semaphore'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  permission,  semop() adds the sem_op value to
       the semaphore's current semval 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 semaphore'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    [Toc]    [Back]

       [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 communication. The names  of  these  routines
       adhere  to  the format sem_* and their reference pages are
       listed in SEE ALSO.

RETURN VALUES    [Toc]    [Back]

       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    [Toc]    [Back]

       The semop() function sets errno to  the  specified  values
       for  the  following  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
       semaphore 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 operation caused a semval value
       to overflow the  system-defined  limit,  or  an  operation
       caused  an  adjust-on-exit  value  to  exceed  the systemdefined
 limit.  [Tru64 UNIX]  The requested  operation  is
       not supported by this implementation.

SEE ALSO    [Toc]    [Back]

      
      
       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)
[ Back ]
 Similar pages
Name OS Title
semctl Tru64 Perform semaphore control operations
semop Linux semaphore operations
semtimedop HP-UX semaphore operations
semop OpenBSD semaphore operations
semop HP-UX semaphore operations
semop NetBSD semaphore operations
semop IRIX semaphore operations
semctl FreeBSD control operations on a semaphore set
semctl NetBSD semaphore control operations
usctlsema IRIX semaphore control operations
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service