shmop(2) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

shmop(2)

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


       For shared memory segments created with the SHM_SHARE_MMU or  SHM_PAGE‐
       ABLE  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   &  SHM_SHARE_MMU)  is true, virtual memory resources in
       addition to shared memory itself are shared among  processes  that  use
       the same shared memory.


       When  (shmflg   &  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.


       Segments  created  using shmget_osm(2) may not be attached with shmflag
       flags of SHM_SHARE_MMU, SHM_PAGEABLE, or SHM_RND.


       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 cri‐
       teria:

           o      If shmaddr is equal to NULL, the segment is attached to  the
                  first available address as selected by the system.


           o      If shmaddr is equal to NULL and (shmflg  & SHM_SHARE_MMU) or
                  (shmflg  &  SHM_PAGEABLE)  is  true,  then  the  segment  is
                  attached  to  the  first available suitably aligned address.
                  When (shmflg  & SHM_SHARE_MMU) or (shmflg   &  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 NULL and (shmflg  & SHM_RND) is
                  true, the segment  is  attached  to  the  address  given  by
                  (shmaddr  − (shmaddr modulus SHMLBA)).


           o      If  shmaddr  is not equal to NULL and (shmflg  & SHM_RND) is
                  false, the segment is  attached  to  the  address  given  by
                  shmaddr.


           o      The   segment   is   attached  for  reading  if  (shmflg   &
                  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.


       Shared memory segments must be explicitly removed after the last refer‐
       ence to them has been removed.


       Upon  successful completion, shmat() increments the value of shm_nattch
       and updates the shm_atime timestamp in the shmid_ds  structure  associ‐
       ated  with  the  shared memory segment; shmdt() decrements the value of
       shm_nattch and updates the shm_dtime timestamp. See the  Shared  Memory
       Identifier section of Intro(2) for more information.

RETURN VALUES
       Upon  successful  completion,  shmat()  returns  the data segment start
       address of the attached shared memory  segment.  Otherwise,  SHM_FAILED
       (−1)  is returned, the shared memory segment is not attached, and errno
       is set to indicate the error.


       Upon successful completion, shmdt() returns  0.  Otherwise,  SHM_FAILED
       (−1)  is returned, the shared memory segment is not detached, 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 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  & SHM_RND) is false.

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

                 SHM_SHARE_MMU is not supported in certain architectures.

                 Both (shmflg  & SHM_SHARE_MMU) and (shmflg   &  SHM_PAGEABLE)
                 are true.

                 (shmflg   & SHM_SHARE_MMU) is true and the shared memory seg‐
                 ment specified by shmid() had previously been attached  by  a
                 call to shmat() in which (shmflg  & SHM_PAGEABLE) was true.

                 (shmflg   &  SHM_PAGEABLE) is true and the shared memory seg‐
                 ment specified by shmid() had previously been attached  by  a
                 call to shmat() in which (shmflg  & SHM_SHARE_MMU) was true.

                 The segment was created using shmget_osm(2), and one of (shm‐
                 flg  & SHM_PAGEABLE), (shmflg  & SHM_SHARE_MMU),  or  (shmflg
                 & SHM_RND) is true.

                 The  segment was created using shmget_osm(2), and the shmaddr
                 argument is not equal to 0, and shmaddr is not aligned to the
                 segment's granule size.


       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.



       The shmdt() function will fail if:

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


       ENOMEM    (shmflg  & SHM_SHARE_MMU) 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  per‐
       formance on certain platforms due to D-cache aliasing.


       Using  a  fixed value for the shmaddr argument can also result in hard-
       to-reproduce failures to attach  shared  memory  segments  at  a  given
       address when Address Space Layout Randomization (ASLR) is enabled. Pro‐
       grams that require specifying memory layouts can be tagged at link time
       to  disable ASLR for their process. For more information, see the ld(1)
       and sxadm(8) man pages.

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


       tab() box; cw(2.75i) |cw(2.75i) lw(2.75i) |lw(2.75i) ATTRIBUTE  TYPEAT‐
       TRIBUTE  VALUE  _  Interface StabilityCommitted _ MT-LevelAsync-Signal-
       Safe _ StandardSee standards(7).


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

HISTORY
       The  shmat()  and  shmdt()  functions,  and  the  flags  SHM_RDONLY and
       SHM_RND, have been included in all Sun and Oracle releases  of  Solaris
       since Solaris 2.0.


       Support  for the SHM_SHARE_MMU flag was added to Solaris in the Solaris
       2.2 release.


       Support for the SHM_PAGEABLE flag was added to Solaris in the Solaris 8
       1/01 (Update 3) release.



Oracle Solaris 11.4               15 Sep 2020                         shmop(2)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3