我正在使用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 ),它不会遭受这种键冲突的影响

关于c - ftok()碰撞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7333013/

10-13 08:24