为可以有多个实例的应用程序创build消息队列的唯一键

我制作了一个Linux CUI应用程序,通过Message-Quene在进程之间进行通信。

只要它是一个实例,它就没有问题。 但是,当同一个应用程序有多个实例时,该排队中的消息将被发送到错误的实例。

我知道这可以通过给msgget函数一个唯一的键来避免。 使用ftok()来创build一个键,但由于variables是相同的,它们会导致相同的键。

有人可以指导我如何拥有一个独特的关键每个实例?

我现在唯一的想法是将给予ftok的variables进行随机化,而且我知道不能这样做。

小心小心!

这只对给定的文件系统是唯一的,只有在文件系统不被大量使用的情况下。 fttok由文件系统中的文件条目号驱动。

这曾经是获得独特价值的一个很好的方式,但时间和摩尔定律在几年前就已经赶上了。 它在文件编号的低8位上工作,但实际文件编号现在是32位,每个文件系统重新编号。

进程ID是一个相当不错的选择,他们确实得到了重新循环,但没有进程还活着。

你可以尝试使用进程ID。 我的谷歌foo得到了这个

寻找通常称为Guid或Uuid的全球唯一ID。 必须有一个库可以用来生成它们。 它们是由您的网址,当前时间和随机数制成的唯一字符串。

时钟怎么样? 维基百科说,它比RDTSC(和SMP安全)更好。

“在Linux下,通过使用POSIX clock_gettime函数读取CLOCK_MONOTONIC时钟的值来提供类似的功能。”