shm_overview(7) – Linux manual page (man7.org)
shm_overview – overview of POSIX shared memory
POSIX 共享内存 API 允许进程通过共享内存区域来传递信息。
其接口主要包括了:
close(2) 关闭由 shm_open(3) 分配的文件描述符,当它不再被需要时
fstat(2) 获取描述共享内存对象的统计结构。 此调用返回的信息包括对象的大小 (st_size)、权限 (st_mode)、所有者 (st_uid) 和组 (st_gid)。
fchown(2) 更改共享内存对象的所有权。
fchmod(2) 更改共享内存对象的权限。
POSIX shared memory is supported since Linux 2.4 and glibc 2.2.
POSIX 共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或者直到所有进程都取消映射该对象并使用 shm_unlink(3) 将其删除
使用 POSIX 共享内存 API 的程序必须使用 cc -lrt
编译以链接实时库 librt。
Accessing shared memory objects via the filesystem
在 Linux 上,共享内存对象是在 (tmpfs(5)) 虚拟文件系统中创建的,通常安装在 /dev/shm 下。 从内核 2.6.19 开始,Linux 支持使用访问控制列表 (ACL) 来控制虚拟文件系统中对象的权限。
通常,进程必须同步它们对共享内存对象的访问,例如使用 POSIX 信号量。
System V 共享内存(shmget(2)、shmop(2) 等)是较旧的共享内存 API。 POSIX 共享内存提供了一个更简单、设计更好的接口; 另一方面,与 System V 共享内存相比,POSIX 共享内存的可用性稍差(尤其是在旧系统上)。