OpenBSD manual page server

Manual Page Search Parameters

SHMAT(2)                  OpenBSD Programmer's Manual                 SHMAT(2)

     shmat, shmdt - map/unmap shared memory

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

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

     shmdt(const void *shmaddr);

     shmat() maps the shared memory segment associated with the shared memory
     identifier shmid into the address space of the calling process.  The ad-
     dress at which the segment is mapped is determined by the shmaddr parame-
     ter.  If it is equal to 0, the system will pick an address itself.  Oth-
     erwise, an attempt is made to map the shared memory segment at the ad-
     dress shmaddr specifies.  If SHM_RND is set in shmflg, the system will
     round the address down to a multiple of SHMLBA bytes (SHMLBA is defined
     in <sys/shm.h>).

     A shared memory segment can be mapped read-only by specifying the
     SHM_RDONLY flag in shmflg.

     shmdt() unmaps the shared memory segment that is currently mapped at
     shmaddr from the calling process' address space.  shmaddr must be a value
     returned by a prior shmat() call.  A shared memory segment will remain
     existent until it is removed by a call to shmctl(2) with the IPC_RMID

     shmat() returns the address at which the shared memory segment has been
     mapped into the calling process' address space when successful, shmdt()
     returns 0 on successful completion.  Otherwise, a value of -1 is re-
     turned, and the global variable errno is set to indicate the error.

     shmat() will fail if:

     [EACCES]      The calling process has no permission to access this shared
                   memory segment.

     [ENOMEM]      There is not enough available data space for the calling
                   process to map the shared memory segment.

     [EINVAL]      shmid is not a valid shared memory identifier.

                   shmaddr specifies an illegal address.

     [EMFILE]      The number of shared memory segments has reached the sys-
                   tem-wide limit.

     shmdt() will fail if:

     [EINVAL]      shmaddr is not the start address of a mapped shared memory

     ipcrm(1), ipcs(1), mmap(2), shmctl(2), shmget(2)

OpenBSD 3.4                     August 17, 1995                              1