系统中有一个现有代码,它使用ftok()根据文件名生成密钥,并将零传递给它。代码在32位上运行良好,但是当移动到64位时开始随机地抱怨。通过更多的研究,我发现这主要是因为低意义位是零,shmopen()可能是一个更好的选择。让我知道shmopen()在密钥碰撞中安全吗?有什么更好的方法来避免关键碰撞吗?
key = ftok(filename,0);发布于 2013-05-20 07:09:40
来自POSIX规范
当使用相同的id值调用时,ftok()函数将为所有命名相同文件的路径返回相同的键值,并在使用不同的id值调用时返回不同的键值,或者使用同时命名同一文件系统中存在的不同文件的路径返回不同的键值。未指定ftok()是否在删除并用相同名称重新创建指定的文件后再次调用时返回相同的键值。
因此,使用相同的路径和id调用函数将返回相同的键。如果您想要相同路径的不同键,则需要更改id。
是的,当id导致未指定的行为时,传递零,所以您不应该这样做。
https://stackoverflow.com/questions/16644308
复制相似问题