我制作了一个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
时钟的值来提供类似的功能。”