本章描述了 NSPR API 中命名共享内存的使用。共享内存允许多个进程访问一个或多个公共共享内存区域,将其用作进程间通信通道。NSPR 共享内存 API 提供了一个跨平台的命名共享内存接口,该接口以 Unix 和 Windows 操作系统中的类似构造为模型。
共享内存协议¶
使用命名共享内存函数¶
PR_OpenSharedMemory 创建共享内存段(如果尚不存在),或者如果共享内存段已存在,则打开与该段的连接。
PR_AttachSharedMemory 应在调用 PR_OpenSharedMemory 后调用,以将内存段映射到应用程序地址空间中的一个地址。 PR_AttachSharedMemory 也可用于在分离相同的 PRSharedMemory
对象后重新映射共享内存段。完成后务必将其分离。
PR_DetachSharedMemory 应在需要时调用,以将共享内存段从应用程序的地址空间中取消映射。
PR_CloseSharedMemory 应在进程中不再需要使用 PRSharedMemory
对象时调用。在调用 PR_CloseSharedMemory 后,PRSharedMemory
对象无效且无法重用。
PR_DeleteSharedMemory 应在进程终止前调用。在调用 PR_DeleteSharedMemory 后,进一步使用与该名称关联的共享内存可能会导致不可预测的结果。
文件名¶
传递给 PR_OpenSharedMemory 的名称应是 Unix 平台上的有效文件名。 PR_OpenSharedMemory 使用传入的名称创建文件。某些平台可能会在创建文件和共享内存之前修改名称。Unix 实现可能使用 SysV IPC 共享内存、Posix 共享内存或内存映射文件;文件名可用于定义命名空间。在 Windows 上,名称很重要,但名称没有关联的文件。
不应对命名文件中数据的持久性做出任何假设。根据平台的不同,共享内存可能会映射到系统分页空间并在进程终止时被丢弃。
提供给 PR_OpenSharedMemory 的所有名称都应为有效的文件名语法或目标平台上共享内存的名称语法。引用的目录应具有适合写入的权限。
共享内存资源的限制¶
不同的平台对共享内存资源的数量和大小都有限制。某些平台上的默认系统限制可能小于您的需求。这些限制在某些平台上可以通过启动时选项或通过设置系统分页空间的大小来调整,以容纳更多和/或更大的共享内存段。
安全注意事项¶
在 Unix 平台上,根据实现的不同,共享内存的备份存储的内容可以通过文件系统公开。在创建和附加时设置权限或访问控制,以确保获得所需的安全性。
在 Windows 平台上,没有提供特殊的安全措施。