我在用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 更有用?
您可能需要考虑使用 POSIX 共享内存(通过shm_open http://pubs.opengroup.org/onlinepubs/009604499/functions/shm_open.html),它不会受到这种按键冲突的影响
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)