我正在使用shmget在我的Linux项目的进程之间共享数据。
int shmget(key_t key, size_t size, int shmflg);但是,任何其他程序也可以调用shmget,因此可能会导致键冲突(因为我使用常量作为键来调用shmget,所以必须使用常量而不是生成的键,因为横向进程是单独构建和运行的)。
在shmget中应该使用哪些安全值作为键?
发布于 2012-08-27 16:58:50
我建议您使用POSIX shm_open (带有mmap),只要您不使用与其他软件相同的命名区域,它就不会存在与ftok冲突的问题。
发布于 2012-08-27 15:03:14
没有安全值,您(以及创建共享段的所有其他进程)应该使用IPC_EXCL来确保不会发生冲突。然而,后者应该确保其他程序不会开始写入您的代码段(除非它们写得很糟糕)。
您可以尝试在ftok()上构建您的“私有”密钥常量,但是,您知道这并不安全。如果你遇到了什么东西,你就没有办法告诉你的程序这不是正确的密钥。还要记住这一点:
只有
id的低位8位是有效的。如果这些位为0,则ftok()的行为未指定。
换句话说,不要在那里传递0 ;)。
在任何情况下,你都应该认真考虑建立某种沟通渠道。由服务器使用id写入的单个文件就足够了,然后其他程序将读取该文件。
从其他方面来说,您可以尝试将服务器PID作为id传递,如果其他进程至少可以这样做的话。这可以让它变得更“安全”。
https://stackoverflow.com/questions/12137291
复制相似问题