选择共享内存或 unix 信号量键的惯用方法
Idiomatic way to chose shared memory or unix semaphore key
为 shmget
或 semget
功能选择键的惯用方法是什么?
我如何确定其他一些进程没有使用同一个密钥?
是的。我知道一个大的随机数很可能不会被其他人使用,但是有没有一种可靠的方法来选择它?
也许您知道有一个函数 ftok
可以让您从文件路径中获取密钥。所以有一个"personal"键的问题就是找到一个"personal"文件。保证不同的文件有不同的密钥。一个习语可以是创建一个临时文件(在 tmpnam
? 的帮助下),或者创建一个隐藏在某个私有目录中的文件并与 ftok
.
一起使用
首先分配共享内存或信号量时,同时使用标志 IPC_CREAT
和 IPC_EXCL
。如果已经存在具有给定键的共享内存段,shmget
命令将失败。反复尝试使用新的随机密钥获取共享内存段,直到成功。
现在你必须弄清楚如何将你使用的密钥传递给其他进程。正如你建议的使用随机数,我假设你有这样的方法。
为 shmget
或 semget
功能选择键的惯用方法是什么?
我如何确定其他一些进程没有使用同一个密钥?
是的。我知道一个大的随机数很可能不会被其他人使用,但是有没有一种可靠的方法来选择它?
也许您知道有一个函数 ftok
可以让您从文件路径中获取密钥。所以有一个"personal"键的问题就是找到一个"personal"文件。保证不同的文件有不同的密钥。一个习语可以是创建一个临时文件(在 tmpnam
? 的帮助下),或者创建一个隐藏在某个私有目录中的文件并与 ftok
.
首先分配共享内存或信号量时,同时使用标志 IPC_CREAT
和 IPC_EXCL
。如果已经存在具有给定键的共享内存段,shmget
命令将失败。反复尝试使用新的随机密钥获取共享内存段,直到成功。
现在你必须弄清楚如何将你使用的密钥传递给其他进程。正如你建议的使用随机数,我假设你有这样的方法。