shm_overview - overview of POSIX shared memory
The POSIX shared memory API allows processes to communicate information by
sharing a region of memory.
The interfaces employed in the API are:
-
shm_open(3)
- Create and open a new object, or open an existing object.
This is analogous to open(2). The call returns a file descriptor
for use by the other interfaces listed below.
-
ftruncate(2)
- Set the size of the shared memory object. (A newly created
shared memory object has a length of zero.)
-
mmap(2)
- Map the shared memory object into the virtual address space
of the calling process.
-
munmap(2)
- Unmap the shared memory object from the virtual address
space of the calling process.
-
shm_unlink(3)
- Remove a shared memory object name.
-
close(2)
- Close the file descriptor allocated by shm_open(3)
when it is no longer needed.
-
fstat(2)
- Obtain a stat structure that describes the shared
memory object. Among the information returned by this call are the
object's size (st_size), permissions (st_mode), owner
(st_uid), and group (st_gid).
-
fchown(2)
- To change the ownership of a shared memory object.
-
fchmod(2)
- To change the permissions of a shared memory object.
POSIX shared memory is supported since Linux 2.4 and glibc 2.2.
POSIX shared memory objects have kernel persistence: a shared memory object will
exist until the system is shut down, or until all processes have unmapped the
object and it has been deleted with
shm_unlink(3)
Programs using the POSIX shared memory API must be compiled with
cc -lrt
to link against the real-time library,
librt.
On Linux, shared memory objects are created in a (
tmpfs(5)) virtual
filesystem, normally mounted under
/dev/shm. Since Linux 2.6.19, Linux
supports the use of access control lists (ACLs) to control the permissions of
objects in the virtual filesystem.
Typically, processes must synchronize their access to a shared memory object,
using, for example, POSIX semaphores.
System V shared memory (
shmget(2),
shmop(2), etc.) is an older
shared memory API. POSIX shared memory provides a simpler, and better designed
interface; on the other hand POSIX shared memory is somewhat less widely
available (especially on older systems) than System V shared memory.
fchmod(2),
fchown(2),
fstat(2),
ftruncate(2),
memfd_create(2),
mmap(2),
mprotect(2),
munmap(2),
shmget(2),
shmop(2),
shm_open(3),
shm_unlink(3),
sem_overview(7)