The
shmat()
system call
attaches the shared memory segment identified by
shmid
to the calling process's address space.
The address where the segment
is attached is determined as follows:
- If
addr
is 0, the segment is attached at an address selected by the
kernel.
- If
addr
is nonzero and
SHM_RND
is not specified in
flag,
the segment is attached the specified address.
- If
addr
is specified and
SHM_RND
is specified,
addr
is rounded down to the nearest multiple of SHMLBA.
If the
SHM_REMAP
flag is specified and the passed
addr
is not
NULL,
any existing mappings in the virtual addresses range are
cleared before the segment is attached.
If the flag is not specified,
addr
is not
NULL,
and the virtual address range contains
some pre-existing mappings, the
shmat()
call fails.
The
shmdt()
system call
detaches the shared memory segment at the address specified by
addr
from the calling process's address space.