使用ftok()重复键

时间:2013-05-20 07:06:22

标签: c ipcs

我在系统中有一个现有代码,它使用ftok()根据文件名生成密钥并传递给它。代码在32位上工作正常,但在移动到64位时开始随机抱怨。在研究更多时,我发现这主要是因为较低的显着位为零,而shmopen()可能是更好的选择。让我知道shmopen()对关键碰撞是否安全?有没有更好的方法来避免关键碰撞?

key = ftok(filename,0);

1 个答案:

答案 0 :(得分:1)

来自POSIX specification

  

当使用相同的id值调用时,ftok()函数将为所有命名同一文件的路径返回相同的键值,并在使用不同的id值调用时返回不同的键值,或者使用指定不同文件的路径返回不同的键值同时在同一个文件系统上。未指定ftok()在删除路径所指定的文件并使用相同名称重新创建后再次调用时是否应返回相同的键值。

因此,使用相同的路径和id调用该函数将返回相同的密钥。如果您想为同一路径使用不同的密钥,则需要更改ID。

是的,传递零作为id导致未指定的行为,所以你不应该这样做。

相关问题