MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


System Calls                                             shmop(2)



NAME
     shmop, shmat, shmdt - shared memory operations

SYNOPSIS
     #include 
     #include 

     void *shmat(int shmid, const void *shmaddr, int shmflg);


     int shmdt(char *shmaddr);


  Standard conforming
     int shmdt(const void *shmaddr);


DESCRIPTION
     The shmat() function  attaches  the  shared  memory  segment
     associated  with  the  shared memory identifier specified by
     shmid to the data segment of the calling process.


     The permission required for a shared memory  control  opera-
     tion is given as {token}, where token is the type of permis-
     sion needed. The types of permission are interpreted as fol-
     lows:

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



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


     For shared memory segments created with the SHMSHAREMU or
     SHMPAGEABLE   flags,  the  default  protections  cannot  be
     changed so as to prevent a  single  process  from  affecting
     other processes sharing the same shared segment.


     When  (shmflg&SHMSHAREMU)   is   true,   virtual   memory
     resources  in  addition  to  shared memory itself are shared
     among processes that use the same shared memory.





SunOS 5.11          Last change: 10 Mar 2008                    1






System Calls                                             shmop(2)



     When (shmflg&SHMPAGEABLE) is true, virtual memory resources
     are shared and the dynamic shared memory (DISM) framework is
     created. The dynamic shared memory can  be  resized  dynami-
     cally  within  the  specified  size  in  shmget(2). The DISM
     shared memory is pageable unless it is locked.


     The shared memory segment is attached to the data segment of
     the calling process at the address specified based on one of
     the  following criteria:

         o    If shmaddr is equal to (void *) 0, the  segment  is
              attached to the first available address as selected
              by the system.

         o    If   shmaddr  is  equal  to   (void  *)  0  and   (
              shmflg&SHMSHAREMU)  or  (shmflg&SHMPAGEABLE) is
              true, then the segment is  attached  to  the  first
              available    suitably    aligned    address.   When
              (shmflg&SHMSHAREMU) or (shmflg&SHMPAGEABLE)  is
              set,  however,  the  permission  given by  shmget()
              determines whether  the  segment  is  attached  for
              reading or reading and writing.

         o    If  shmaddr  is  not  equal  to  (void  *)  0   and
              (shmflg&SHMRND)  is  true, the segment is attached
              to the address given by (shmaddr-  (shmaddr modulus
              SHMLBA)).

         o    If  shmaddr  is  not  equal  to  (void  *)  0   and
              (shmflg&SHMRND)  is false, the segment is attached
              to the address given by shmaddr.

         o    The   segment   is   attached   for   reading    if
              (shmflg&SHMRDONLY) is true {READ}, otherwise it is
              attached for reading and writing {READ/WRITE}.


     The shmdt() function detaches  from  the  calling  process's
     data  segment  the  shared  memory  segment  located  at the
     address  specified  by  shmaddr.  If  the   application   is
     standard-conforming (see standards(5)), the shmaddr argument
     is of type const void *. Otherwise it is of type char *.


     Shared memory segments must be explicitly removed after  the
     last reference to them has been removed.

RETURN VALUES
     Upon successful completion, shmat() returns the data segment
     start address of the attached shared memory segment; shmdt()
     returns 0. Otherwise, -1  is  returned,  the  shared  memory



SunOS 5.11          Last change: 10 Mar 2008                    2






System Calls                                             shmop(2)



     segment  is  not  attached, and errno is set to indicate the
     error.

ERORS
     The shmat() function will fail if:

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


     EINVAL    The shmid argument is not a  valid  shared  memory
               identifier.

               The shmaddr argument is not equal to  0,  and  the
               value  of  (shmaddr-  (shmaddr modulus SHMLBA)) is
               an illegal address.

               The shmaddr argument is not  equal  to  0,  is  an
               illegal address, and (shmflg&SHMRND) is false.

               The shmaddr argument is not equal  to  0,  is  not
               properly  aligned,  and  (shmfg&SHMSHAREMU)  is
               true.

               SHMSHAREMU is not supported in  certain  archi-
               tectures.

               Both          (shmflg&SHMSHAREMU)           and
               (shmflg&SHMPAGEABLE) are true.

               (shmflg&SHMSHAREMU)  is  true  and  the  shared
               memory segment specified by shmid() had previously
               been attached  by  a  call  to  shmat()  in  which
               (shmflg&SHMPAGEABLE) was true.

               (shmflg&SHMPAGEABLE)  is  true  and  the   shared
               memory segment specified by shmid() had previously
               been attached  by  a  call  to  shmat()  in  which
               (shmflg&SHMSHAREMU) was true.


     EMFILE    The number of shared memory segments  attached  to
               the  calling  process  would  exceed  the  system-
               imposed limit.


     ENOMEM    The available data space  is not large  enough  to
               accommodate the shared memory segment.







SunOS 5.11          Last change: 10 Mar 2008                    3






System Calls                                             shmop(2)



     The shmdt() function will fail if:

     EINVAL    The shmaddr argument is not the data segment start
               address of a shared memory segment.


     ENOMEM    (shmflg&SHMSHAREMU) is true  and  attaching  to
               the  shared memory segment would exceed a limit or
               resource control on locked memory.


WARNINGS
     Using a fixed value for the shmaddr argument  can  adversely
     affect  performance  on  certain  platforms  due  to D-cache
     aliasing.

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



     
           ATRIBUTE TYPE               ATRIBUTE VALUE       
    
     Interface Stability          Committed                   
    
     MT-Level                     Async-Signal-Safe           
    
     Standard                     See standards(5).           
    


SEE ALSO
     Intro(2), exec(2), exit(2), fork(2),  shmctl(2),  shmget(2),
     attributes(5), standards(5)



















SunOS 5.11          Last change: 10 Mar 2008                    4



OpenSolaris man pages main menu

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