---
name: "shm_overview"
section: "7"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/shm_overview"
---

# shm\_overview(7)

overview of POSIX shared memory

## NAME

shm\_overview - overview of POSIX shared memory

## DESCRIPTION

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)](/shm_open/3.md)

  Create and open a new object, or open an existing object. This is analogous to [**open**(2)](/open/2.md). The call returns a file descriptor for use by the other interfaces listed below.

- [**ftruncate**(2)](/ftruncate/2.md)

  Set the size of the shared memory object. (A newly created shared memory object has a length of zero.)

- [**mmap**(2)](/mmap/2.md)

  Map the shared memory object into the virtual address space of the calling process.

- [**munmap**(2)](/munmap/2.md)

  Unmap the shared memory object from the virtual address space of the calling process.

- [**shm\_unlink**(3)](/shm_unlink/3.md)

  Remove a shared memory object name.

- [**close**(2)](/close/2.md)

  Close the file descriptor allocated by [**shm\_open**(3)](/shm_open/3.md) when it is no longer needed.

- [**fstat**(2)](/fstat/2.md)

  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)](/fchown/2.md)

  To change the ownership of a shared memory object.

- [**fchmod**(2)](/fchmod/2.md)

  To change the permissions of a shared memory object.

### Versions

POSIX shared memory is supported since Linux 2.4 and glibc 2.2.

### Persistence

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)](/shm_unlink/3.md)

### Linking

Programs using the POSIX shared memory API must be compiled with *cc -lrt* to link against the real-time library, *librt*.

### Accessing shared memory objects via the filesystem

On Linux, shared memory objects are created in a ([**tmpfs**(5)](/tmpfs/5.md)) 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.

## NOTES

Typically, processes must synchronize their access to a shared memory object, using, for example, POSIX semaphores.

System V shared memory ([**shmget**(2)](/shmget/2.md), [**shmop**(2)](/shmop/2.md), 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.

## SEE ALSO

[**fchmod**(2)](/fchmod/2.md), [**fchown**(2)](/fchown/2.md), [**fstat**(2)](/fstat/2.md), [**ftruncate**(2)](/ftruncate/2.md), [**memfd\_create**(2)](/memfd_create/2.md), [**mmap**(2)](/mmap/2.md), [**mprotect**(2)](/mprotect/2.md), [**munmap**(2)](/munmap/2.md), [**shmget**(2)](/shmget/2.md), [**shmop**(2)](/shmop/2.md), [**shm\_open**(3)](/shm_open/3.md), [**shm\_unlink**(3)](/shm_unlink/3.md), [**sem\_overview**(7)](/sem_overview/7.md)
