Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       shmat - XSI shared memory attach operation

SYNOPSIS

       #include <sys/shm.h>

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

DESCRIPTION

       The  shmat()  function  operates  on XSI shared memory (see the Base Definitions volume of
       IEEE Std 1003.1-2001, Section 3.340, Shared Memory Object). It is unspecified whether this
       function  interoperates with the realtime interprocess communication facilities defined in
       Realtime .

       The shmat() function attaches the shared memory segment associated with the shared  memory
       identifier  specified by shmid to the address space of the calling process. The segment is
       attached at the address specified by one of the following criteria:

        * If shmaddr is a null pointer, the segment is attached at the first available address as
          selected by the system.

        * If  shmaddr  is  not  a  null pointer and (shmflg &SHM_RND) is non-zero, the segment is
          attached  at  the  address  given  by  (shmaddr  -((uintptr_t)shmaddr  %SHMLBA)).   The
          character '%' is the C-language remainder operator.

        * If shmaddr is not a null pointer and (shmflg &SHM_RND) is 0, the segment is attached at
          the address given by shmaddr.

        * The segment is attached for reading if (shmflg &SHM_RDONLY) is non-zero and the calling
          process has read permission; otherwise, if it is 0 and the calling process has read and
          write permission, the segment is attached for reading and writing.

RETURN VALUE

       Upon successful completion, shmat() shall increment the value of shm_nattch  in  the  data
       structure  associated  with the shared memory ID of the attached shared memory segment and
       return the segment's start address.

       Otherwise, the shared memory segment shall not be attached, shmat() shall return  -1,  and
       errno shall be set to indicate the error.

ERRORS

       The shmat() function shall fail if:

       EACCES Operation  permission  is  denied  to  the  calling  process;  see XSI Interprocess
              Communication .

       EINVAL The value of shmid is not a valid shared memory identifier, the shmaddr  is  not  a
              null  pointer,  and  the  value  of  (shmaddr  -((uintptr_t)shmaddr %SHMLBA)) is an
              illegal address for attaching shared memory; or the shmaddr is not a null  pointer,
              (shmflg  &SHM_RND)  is  0,  and  the  value  of  shmaddr  is an illegal address for
              attaching shared memory.

       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 following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       The  POSIX  Realtime   Extension   defines   alternative   interfaces   for   interprocess
       communication. Application developers who need to use IPC should design their applications
       so that modules using the IPC routines described in XSI Interprocess Communication can  be
       easily modified to use the alternative interfaces.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       XSI  Interprocess Communication , Realtime , exec() , exit() , fork() , shmctl() , shmdt()
       ,  shmget()  ,  shm_open()   ,   shm_unlink()   ,   the   Base   Definitions   volume   of
       IEEE Std 1003.1-2001, <sys/shm.h>

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1, 2003 Edition, Standard for Information Technology  --  Portable  Operating  System
       Interface  (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by
       the Institute of Electrical and Electronics Engineers, Inc and  The  Open  Group.  In  the
       event  of  any  discrepancy  between this version and the original IEEE and The Open Group
       Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .