*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->OpenBSD man pages -> shmat (2)              



NAME    [Toc]    [Back]

     shmat, shmdt - map/unmap shared memory

SYNOPSIS    [Toc]    [Back]

     #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);

DESCRIPTION    [Toc]    [Back]

     shmat() maps the shared memory segment associated  with  the
shared memory
     identifier  shmid into the address space of the calling process.  The address
 at which the segment is mapped is  determined  by  the
shmaddr parameter.
   If  it is equal to 0, the system will pick an address
itself.  Otherwise,
 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 <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

RETURN VALUES    [Toc]    [Back]

     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

ERRORS    [Toc]    [Back]

     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

     shmdt() will fail if:

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

SEE ALSO    [Toc]    [Back]

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

OpenBSD      3.6                          August     17,     1995
[ Back ]
 Similar pages
Name OS Title
munmap HP-UX unmap pages of memory
munmap IRIX unmap pages of memory
mmap Linux map or unmap files or devices into memory
shm_open FreeBSD open or create a shared memory object shm_unlink -- remove a shared memory object
shmdt HP-UX shared memory operations
shmget HP-UX get shared memory segment
shmctl FreeBSD shared memory control
shmop HP-UX shared memory operations
shmat HP-UX shared memory operations
shmx Tru64 shared memory exerciser
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service