MirBSD manpage: shmat(2), shmdt(2)

SHMAT(2)                   BSD 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. Other-
     wise, an attempt is made to map the shared memory segment at the address
     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

     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 ex-
     istent until it is removed by a call to shmctl(2) with the IPC_RMID com-


     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 returned,
     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
                   system-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)

MirBSD #10-current             August 17, 1995                               1

Generated on 2022-12-24 01:00:14 by $MirOS: src/scripts/roff2htm,v 1.113 2022/12/21 23:14:31 tg Exp $ — This product includes material provided by mirabilos.

These manual pages and other documentation are copyrighted by their respective writers; their sources are available at the project’s CVSweb, AnonCVS and other mirrors. The rest is Copyright © 2002–2022 MirBSD.

This manual page’s HTML representation is supposed to be valid XHTML/1.1; if not, please send a bug report — diffs preferred.

Kontakt / Impressum & Datenschutzerklärung