Linux 共享内存是一种进程间通信机制,允许多个进程访问同一块物理内存。使用共享内存,进程可以高效地交换数据,而无需通过文件系统或网络进行复制。
创建共享内存
在 Linux 上,可以通过 shmget 系统调用创建共享内存段。该调用接受以下参数:
- key : 用于标识共享内存段的唯一键
- size : 共享内存段的大小(以字节为单位)
- flags : 指定共享内存段的标志(例如,访问权限、持久性)
成功创建后, shmget 将返回共享内存段的标识符,该标识符可用于后续操作。
映射共享内存
创建共享内存段后,需要将其映射到进程的地址空间。这可以通过 shmat 系统调用实现:
- shmid : 共享内存段的标识符
- addr : 映射共享内存段的虚拟地址(可选)
- flags : 指定映射标志(例如,读写访问)
shmat 成功时,返回指向共享内存段的指针。进程可以使用此指针对共享内存进行读写操作。
撤销映射共享内存
不再需要共享内存后,可以使用 shmdt 系统调用将其撤销映射:
- addr : 映射共享内存段的虚拟地址
撤销映射后,进程将不再能够访问共享内存。
销毁共享内存
当所有进程都不再使用共享内存时,可以使用 shmctl 系统调用将其销毁:
- shmid : 共享内存段的标识符
- cmd : 指定控制命令(例如, IPC_RMID 销毁共享内存)
销毁后,共享内存将被从系统中删除。