我正在使用ftok()
为 C 应用程序使用的共享内存段生成标识符。我遇到了问题,在一个盒子上我与 root 使用的标识符发生冲突。在这种情况下,我可以通过破解代码来修复它,但我想要一个更强大的解决方案。
应用程序安装到它自己的逻辑卷中,提供给 ftok 的路径是应用程序的二进制目录(在该 lv 内)。提供的 ID 从 1 开始,通常有六个左右。
我已经追踪到 ftok 会做这样的事情:
(id & 0xff) << 24 | (st.st_dev & 0xff) << 16 | (st.st_ino & 0xffff)
st.st_dev / st.st_ino 的组合应该是非常独特的。但是我在许多盒子中看到,st_dev 的最低有效位通常为 0(即 st_dev 数字通常是 256 的倍数)。而且由于二进制目录位于逻辑卷中,因此无法保证 inode 编号与 root 使用的编号不同。
有没有解决这个问题的好方法 - 一个更好的 ftok 替代方案,或者一种设置机器的方法,以便 st_dev 数字对 ftok 更有用?