jon*_*ham 6 c++ linux key shared-memory
我正在使用shmget在Linux上的项目进程之间共享数据.
int shmget(key_t key, size_t size, int shmflg);
Run Code Online (Sandbox Code Playgroud)
但是,任何其他程序也可以调用shmget,因此它可能导致键冲突(因为我使用常量作为调用shmget的键,我必须使用常量而不是生成的键,因为横向进程是构建和运行的分别).
什么应该是shmget中用作键的安全值?
没有安全值,您(以及创建共享段的所有其他进程)应该用于IPC_EXCL确保没有冲突.但是,后者应确保其他程序不会开始写入您的细分(除非它们写得很糟糕).
您可以尝试在ftok()之外构建"私有"密钥,但是,您知道它不安全.如果您遇到某些问题,您将无法告诉您的程序这不是正确的密钥.还要记住:
只有低阶8位
id才有意义.如果这些位为0,则不指定ftok()的行为.
换句话说,不要通过0那里;).
无论如何,你应该认真考虑建立一些沟通渠道.服务器用id写的单个文件就足够了,然后由其他程序读取.
从其他想法,您可以尝试传递服务器PID id,如果其他进程至少可以获得.这可能会让它更"安全".