首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shmget中用作键的安全值

在shmget中用作键的安全值
EN

Stack Overflow用户
提问于 2012-08-27 14:41:26
回答 2查看 4.9K关注 0票数 6

我正在使用shmget在我的Linux项目的进程之间共享数据。

代码语言:javascript
复制
int shmget(key_t key, size_t size, int shmflg);

但是,任何其他程序也可以调用shmget,因此可能会导致键冲突(因为我使用常量作为键来调用shmget,所以必须使用常量而不是生成的键,因为横向进程是单独构建和运行的)。

在shmget中应该使用哪些安全值作为键?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-27 16:58:50

我建议您使用POSIX shm_open (带有mmap),只要您不使用与其他软件相同的命名区域,它就不会存在与ftok冲突的问题。

票数 5
EN

Stack Overflow用户

发布于 2012-08-27 15:03:14

没有安全值,您(以及创建共享段的所有其他进程)应该使用IPC_EXCL来确保不会发生冲突。然而,后者应该确保其他程序不会开始写入您的代码段(除非它们写得很糟糕)。

您可以尝试在ftok()上构建您的“私有”密钥常量,但是,您知道这并不安全。如果你遇到了什么东西,你就没有办法告诉你的程序这不是正确的密钥。还要记住这一点:

只有id的低位8位是有效的。如果这些位为0,则ftok()的行为未指定。

换句话说,不要在那里传递0 ;)。

在任何情况下,你都应该认真考虑建立某种沟通渠道。由服务器使用id写入的单个文件就足够了,然后其他程序将读取该文件。

从其他方面来说,您可以尝试将服务器PID作为id传递,如果其他进程至少可以这样做的话。这可以让它变得更“安全”。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12137291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档