我在系统中有一个现有代码,它使用 ftok() 根据文件名和传递给它的零生成密钥。该代码在 32 位上运行良好,但在移至 64 位时开始随机抱怨。在研究更多时,我发现这主要是因为较低的有效位为零,而 shmopen() 可能是更好的选择。让我知道 shmopen() 是否可以避免按键冲突?有没有更好的方法来避免键冲突?
key = ftok(filename,0);
从POSIX 规范:
当使用相同的 id 值调用时,ftok() 函数应为命名同一文件的所有路径返回相同的键值,并在使用不同的 id 值或命名相同文件的路径时返回不同的键值同时文件系统。未指定在路径命名的文件被删除并以相同名称重新创建后再次调用时 ftok() 是否应返回相同的键值。
所以调用具有相同路径和 id 的函数将返回相同的键。如果您想为同一路径使用不同的密钥,则需要更改 id。
是的,将零作为 id 传递会导致未指定的行为,所以你不应该这样做。