| .\" Copyright (C) 2008, Linux Foundation, written by Michael Kerrisk |
| .\" <mtk.manpages@gmail.com> |
| .\" |
| .\" %%%LICENSE_START(VERBATIM) |
| .\" Permission is granted to make and distribute verbatim copies of this |
| .\" manual provided the copyright notice and this permission notice are |
| .\" preserved on all copies. |
| .\" |
| .\" Permission is granted to copy and distribute modified versions of this |
| .\" manual under the conditions for verbatim copying, provided that the |
| .\" entire resulting derived work is distributed under the terms of a |
| .\" permission notice identical to this one. |
| .\" |
| .\" Since the Linux kernel and libraries are constantly changing, this |
| .\" manual page may be incorrect or out-of-date. The author(s) assume no |
| .\" responsibility for errors or omissions, or for damages resulting from |
| .\" the use of the information contained herein. The author(s) may not |
| .\" have taken the same level of care in the production of this manual, |
| .\" which is licensed free of charge, as they might when working |
| .\" professionally. |
| .\" |
| .\" Formatted or processed versions of this manual, if unaccompanied by |
| .\" the source, must acknowledge the copyright and authors of this work. |
| .\" %%%LICENSE_END |
| .\" |
| .TH SHM_OVERVIEW 7 2021-03-22 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| shm_overview \- overview of POSIX shared memory |
| .SH DESCRIPTION |
| The POSIX shared memory API allows processes to communicate information |
| by sharing a region of memory. |
| .PP |
| The interfaces employed in the API are: |
| .TP 15 |
| .BR shm_open (3) |
| Create and open a new object, or open an existing object. |
| This is analogous to |
| .BR open (2). |
| The call returns a file descriptor for use by the other |
| interfaces listed below. |
| .TP |
| .BR ftruncate (2) |
| Set the size of the shared memory object. |
| (A newly created shared memory object has a length of zero.) |
| .TP |
| .BR mmap (2) |
| Map the shared memory object into the virtual address space |
| of the calling process. |
| .TP |
| .BR munmap (2) |
| Unmap the shared memory object from the virtual address space |
| of the calling process. |
| .TP |
| .BR shm_unlink (3) |
| Remove a shared memory object name. |
| .TP |
| .BR close (2) |
| Close the file descriptor allocated by |
| .BR shm_open (3) |
| when it is no longer needed. |
| .TP |
| .BR fstat (2) |
| Obtain a |
| .I stat |
| structure that describes the shared memory object. |
| Among the information returned by this call are the object's |
| size |
| .RI ( st_size ), |
| permissions |
| .RI ( st_mode ), |
| owner |
| .RI ( st_uid ), |
| and group |
| .RI ( st_gid ). |
| .TP |
| .BR fchown (2) |
| To change the ownership of a shared memory object. |
| .TP |
| .BR fchmod (2) |
| To change the permissions of a shared memory object. |
| .SS Versions |
| POSIX shared memory is supported since Linux 2.4 and glibc 2.2. |
| .SS 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 |
| .BR shm_unlink (3) |
| .SS Linking |
| Programs using the POSIX shared memory API must be compiled with |
| .I cc \-lrt |
| to link against the real-time library, |
| .IR librt . |
| .SS Accessing shared memory objects via the filesystem |
| On Linux, shared memory objects are created in a |
| .RI ( tmpfs (5)) |
| virtual filesystem, normally mounted under |
| .IR /dev/shm . |
| Since kernel 2.6.19, Linux supports the use of access control lists (ACLs) |
| to control the permissions of objects in the virtual filesystem. |
| .SH NOTES |
| Typically, processes must synchronize their access to a shared |
| memory object, using, for example, POSIX semaphores. |
| .PP |
| System V shared memory |
| .RB ( shmget (2), |
| .BR 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. |
| .SH SEE ALSO |
| .BR fchmod (2), |
| .BR fchown (2), |
| .BR fstat (2), |
| .BR ftruncate (2), |
| .BR memfd_create (2), |
| .BR mmap (2), |
| .BR mprotect (2), |
| .BR munmap (2), |
| .BR shmget (2), |
| .BR shmop (2), |
| .BR shm_open (3), |
| .BR shm_unlink (3), |
| .BR sem_overview (7) |