我正在使用shmget在Linux上的项目进程之间共享数据。
int shmget(key_t key,size_t size,int shmflg);
但是,任何其他程序也可以调用shmget,因此它可能会导致密钥冲突(因为我使用常量作为调用shmget的关键,我必须使用常量而不是生成的密钥,因为横向进程是构build和运行的分别)。
什么应该是在shmget中用作键的安全值?
删除Linux上的所有共享内存和信号量
警告LNK4092:共享可写部分包含重定位
其他程序访问STATIC共享数据结构会对Linux中C的访问时间产生巨大的影响
在C ++中寻找基于Windows RAM的共享内存解决scheme
命名为共享内存:shm_open没有提供正确的位置
shmat()权限被拒绝,即使我有阅读权限
为两个不同的进程创build共享内存
我如何与shm_open共享现有的内存?
如何在Windows上模拟shm_open?
Linux上用于Java / C ++应用程序的共享内存IPC的很好替代scheme
我建议你使用POSIX shm_open (带有mmap ),只要你没有使用与其他软件相同的命名区域,就没有使用ftok存在的冲突问题。
没有安全值,并且您(和其他创建共享段的进程)应该使用IPC_EXCL来确保没有碰撞。 但是,后者应该确保其他程序不会开始写入您的段(除非写得不好)。
你可以尝试建立你的'私人'键不断关闭ftok(),但是,你知道这是不安全的。 如果你碰到什么东西,你就没有办法告诉你的程序这不是正确的关键。 还要记住:
只有id的低8位是重要的。 如果这些位是0,则不指定ftok()的行为。
换句话说,不要在那里传递0 )。
无论如何,你应该认真考虑创建一些沟通渠道。 由服务器用id编写的单个文件就足够了,然后由其他程序读取。
从其他想法,你可以尝试传递服务器PID作为id ,如果其他进程可以得到至少。 这可能会使它更安全一些。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。