选择共享内存或 unix 信号量键的惯用方法

Idiomatic way to chose shared memory or unix semaphore key

shmgetsemget 功能选择键的惯用方法是什么?

我如何确定其他一些进程没有使用同一个密钥?

是的。我知道一个大的随机数很可能不会被其他人使用,但是有没有一种可靠的方法来选择它?

也许您知道有一个函数 ftok 可以让您从文件路径中获取密钥。所以有一个"personal"键的问题就是找到一个"personal"文件。保证不同的文件有不同的密钥。一个习语可以是创建一个临时文件(在 tmpnam? 的帮助下),或者创建一个隐藏在某个私有目录中的文件并与 ftok.

一起使用

首先分配共享内存或信号量时,同时使用标志 IPC_CREATIPC_EXCL。如果已经存在具有给定键的共享内存段,shmget 命令将失败。反复尝试使用新的随机密钥获取共享内存段,直到成功。

现在你必须弄清楚如何将你使用的密钥传递给其他进程。正如你建议的使用随机数,我假设你有这样的方法。