unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-5.10)
Page:
Section:
Apropos / Subsearch:
optional field

shmop(2)                         System Calls                         shmop(2)



NAME
       shmop, shmat, shmdt - shared memory operations

SYNOPSIS
       #include <sys/types.h>
       #include <sys/shm.h>

       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 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    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.

       When (shmflg&&amp;SHM_SHARE_MMU) is true, virtual memory resources in  addi-
       tion  to  shared  memory itself are shared among processes that use the
       same shared memory.

       When (shmflg&&amp;SHM_PAGEABLE) is true, virtual memory resources are shared
       and  the dynamic shared memory (DISM) framework is created. The dynamic
       shared memory can be resized dynamically 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 call-
       ing 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&&amp;SHM_SHARE_MMU) or
            (shmflg&&amp;SHM_PAGEABLE) is true, then the segment is attached to the
            first   available   suitably   aligned   address.    When    (shm-
            flg&&amp;SHM_SHARE_MMU)  or  (shmflg&&amp;SHM_PAGEABLE) 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&&amp;SHM_RND) 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&&amp;SHM_RND) is
            false, the segment is attached to the address given by shmaddr.

         o  The segment is attached for reading if (shmflg&&amp;SHM_RDONLY) 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 refer-
       ence 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.  Oth-
       erwise,  -1 is returned, the shared memory segment is not attached, and
       errno is set to indicate the error.

ERRORS
       The shmat() function will fail if:

       EACCES          Operation permission is denied to the  calling  process
                       (see intro(2)).



       EINVAL          The shmid argument is not a valid shared memory identi-
                       fier.



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



       EINVAL          The shmaddr argument is not equal to 0, is  an  illegal
                       address, and (shmflg&&amp;SHM_RND) is false.



       EINVAL          The shmaddr argument is not equal to 0, is not properly
                       aligned, and (shmfg&&amp;SHM_SHARE_MMU) is true.



       EINVAL          SHM_SHARE_MMU is not  supported  in  certain  architec-
                       tures.



       EINVAL          Both  (shmflg&&amp;SHM_SHARE_MMU)  and (shmflg&&amp;SHM_PAGEABLE)
                       are true.



       EINVAL          (shmflg&&amp;SHM_SHARE_MMU) is true and  the  shared  memory
                       segment   specified  by  shmid()  had  previously  been
                       attached  by  a  call  to  shmat()   in   which   (shm-
                       flg&&amp;SHM_PAGEABLE) was true.

                       (shmflg&&amp;SHM_PAGEABLE)  is  true  and  the shared memory
                       segment  specified  by  shmid()  had  previously   been
                       attached   by   a   call  to  shmat()  in  which  (shm-
                       flg&&amp;SHM_SHARE_MMU) 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 accom-
                       modate the shared memory segment.



       The shmdt() function will fail if:

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



ATTRIBUTES
       See attributes(5) for descriptions of the following attributes:


       tab()     allbox;     cw(2.750000i)|    cw(2.750000i)    lw(2.750000i)|
       lw(2.750000i).  ATTRIBUTE TYPEATTRIBUTE VALUE Interface  StabilityStan-
       dard MT-LevelAsync-Signal-Safe


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



SunOS 5.10                        1 Sep 2003                          shmop(2)