MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


System Calls                                             semop(2)



NAME
     semop, semtimedop - semaphore operations

SYNOPSIS
     #include 
     #include 
     #include 

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


     int semtimedop(int semid, struct sembuf *sops, sizet nsops,
          const struct timespec *timeout);


DESCRIPTION
     The semop() function is used to perform atomically an  array
     of  semaphore operations on the set of semaphores associated
     with the semaphore identifier specified by semid.  The  sops
     argument  is  a  pointer to the array of semaphore-operation
     structures. The nsops argument is the number of such  struc-
     tures in the array.


     Each sembuf structure contains the following members:

       short     semnum;    /* semaphore number */
       short     semop;     /* semaphore operation */
       short     semflg;    /* operation flags */



     Each semaphore operation specified by semop is performed on
     the  corresponding semaphore specified by semid and semnum.
     The permission required for a semaphore operation  is  given
     as  {token},  where  token is the type of permission needed.
     The types of permission are interpreted as follows:

       00400    READ by user
       00200    ALTER by user
       00040    READ by group
       00020    ALTER by group
       00004    READ by others
       00002    ALTER by others



     See the Semaphore Operation Permissions section of  Intro(2)
     for more information.






SunOS 5.11          Last change: 12 May 2006                    1






System Calls                                             semop(2)



     A process maintains a value, semadj, for each  semaphore  it
     modifies.  This  value  contains  the  cumulative  effect of
     operations the process has performed on an individual  sema-
     phore with the SEMUNDO flag set (so that they can be undone
     if the  process  terminates  unexpectedly).   The  value  of
     semadj  can  affect  the  behavior of calls to semop(), sem-
     timedop(), exit(), and exit()  (the  latter  two  functions
     documented  on  exit(2)), but is otherwise unobservable. See
     below for details.


     The semop member specifies one of  three  semaphore  opera-
     tions:

         1.   The semop member is a negative integer; {ALTER}

             o    If semval (see Intro(2))  is  greater  than  or
                  equal  to  the  absolute  value  of semop, the
                  absolute value of  semop  is  subtracted  from
                  semval.  Also,  if  (semflg&SEMUNDO) is true,
                  the absolute value of semop is  added  to  the
                  calling  process's  semadj  value (see exit(2))
                  for the specified semaphore.

             o    If semval is less than the  absolute  value  of
                  semop   and   (semflg&IPCNOWAIT)   is  true,
                  semop() returns immediately.

             o    If semval is less than the  absolute  value  of
                  semop   and   (semflg&IPCNOWAIT)  is  false,
                  semop() increments the semncnt associated  with
                  the  specified semaphore and suspends execution
                  of the calling thread until one of the  follow-
                  ing conditions occur:

                 o    The value of semval becomes greater than or
                      equal to the absolute value of semop. When
                      this occurs, the value of  semncnt  associ-
                      ated with the specified semaphore is decre-
                      mented, the absolute  value  of  semop  is
                      subtracted     from    semval    and,    if
                      (semflg&SEMUNDO) is  true,  the  absolute
                      value  of  semop  is  added to the calling
                      process's semadj value  for  the  specified
                      semaphore.

                 o    The semid for which the calling  thread  is
                      awaiting  action is removed from the system
                      (see semctl(2)). When this occurs, errno is
                      set to EIDRM and -1 is returned.

                 o    The calling thread receives a  signal  that



SunOS 5.11          Last change: 12 May 2006                    2






System Calls                                             semop(2)



                      is  to  be  caught.  When  this occurs, the
                      value of semncnt associated with the speci-
                      fied semaphore is decremented, and the cal-
                      ling thread resumes execution in the manner
                      prescribed in sigaction(2).

         2.   The semop member is a positive integer; {ALTER}

              The value of semop is  added  to  semval  and,  if
              (semflg&SEMUNDO)  is true, the value of semop is
              subtracted from the calling process's semadj  value
              for the specified semaphore.

         3.   The semop member is 0; {READ}

             o    If semval is 0, semop() returns immediately.

             o    If   semval   is   not   equal   to    0    and
                  (semflg&IPCNOWAIT)  is  true, semop() returns
                  immediately.

             o    If   semval   is   not   equal   to    0    and
                  (semflg&IPCNOWAIT)  is  false, semop() incre-
                  ments the semzcnt associated with the specified
                  semaphore and suspends execution of the calling
                  thread until one of the following occurs:

                 o    The value of semval  becomes  0,  at  which
                      time  the  value of semzcnt associated with
                      the specified semaphore is set to 0 and all
                      processes waiting on semval to become 0 are
                      awakened.

                 o    The semid for which the calling  thread  is
                      awaiting action is removed from the system.
                      When this occurs, errno is set to EIDRM and
                      -1 is returned.

                 o    The calling thread receives a  signal  that
                      is  to  be  caught.  When  this occurs, the
                      value of semzcnt associated with the speci-
                      fied semaphore is decremented, and the cal-
                      ling thread resumes execution in the manner
                      prescribed in sigaction(2).


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






SunOS 5.11          Last change: 12 May 2006                    3






System Calls                                             semop(2)



     The semtimedop() function behaves as semop() except when  it
     must  suspend  execution  of the calling process to complete
     its operation.  If semtimedop()  must  suspend  the  calling
     process   after  the  time  interval  specified  in  timeout
     expires, or if the timeout  expires  while  the  process  is
     suspended,  semtimedop()  returns  with  an  error.  If  the
     timespec structure pointed to by timeout is zero-valued  and
     semtimedop()  needs  to  suspend the calling process to com-
     plete the requested  operation(s),  it  returns  immediately
     with  an error. If timeout is the NUL pointer, the behavior
     of semtimedop() is identical to that of semop().

RETURN VALUES
     Upon successful completion, 0 is returned. Otherwise, -1  is
     returned and errno is set to indicate the error.

ERORS
     The semop() and semtimedop() functions will fail if:

     E2BIG     The nsops argument is  greater  than  the  system-
               imposed maximum. See NOTES.


     EACES    Operation permission is denied to the calling pro-
               cess (see Intro(2)).


     EAGAIN    The operation would result in  suspension  of  the
               calling process but (semflg&IPCNOWAIT) is true.


     EFAULT    The sops argument points to an illegal address.


     EFBIG     The value of semnum is less  than  0  or  greater
               than  or  equal to the number of semaphores in the
               set associated with semid.


     EIDRM     A semid was removed from the system.


     EINTR     A signal was received.


     EINVAL    The semid argument is not a valid semaphore  iden-
               tifier, or the number of individual semaphores for
               which the  calling  process  requests  a  SEMUNDO
               operation  would  exceed the system-imposed limit.
               Solaris does not impose a limit on the  number  of
               individual  semaphores  for which the calling pro-
               cess requests a SEMUNDO operation.



SunOS 5.11          Last change: 12 May 2006                    4






System Calls                                             semop(2)



     ENOSPC    The limit on the number  of  individual  processes
               requesting a SEMUNDO operation would be exceeded.
               Solaris does not impose a limit on the  number  of
               individual processes requesting an SEMUNDO opera-
               tion.


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



     The semtimedop() function will fail if:

     EAGAIN    The timeout expired before the requested operation
               could be completed.



     The semtimedop() function will fail if one of the  following
     is detected:

     EFAULT    The timeout argument points to an illegal address.


     EINVAL    The timeout argument specified a tvsec or tvnsec
               value less than 0, or a tvnsec value greater than
               or equal to 1000 million.


ATRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     Interface Stability          semop() is Standard.        
    


SEE ALSO
     ipcs(1), rctladm(1M), Intro(2), exec(2),  exit(2),  fork(2),
     semctl(2),   semget(2),   setrctl(2),  sigaction(2),  attri-
     butes(5), standards(5)

NOTES
     The system-imposed maximum on nsops for a semaphore identif-
     ier is the minimum enforced value of the process.max-sem-ops
     resource  control  of  the  creating  process  at  the  time



SunOS 5.11          Last change: 12 May 2006                    5






System Calls                                             semop(2)



     semget(2) was used to allocate the identifier.


     See rctladm(1M) and setrctl(2) for information  about  using
     resource controls.


















































SunOS 5.11          Last change: 12 May 2006                    6



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™