首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共享内存:密钥和id有什么区别?

共享内存:密钥和id有什么区别?
EN

Stack Overflow用户
提问于 2013-10-22 12:59:07
回答 2查看 9.8K关注 0票数 4

当调用ipcs -a时,key列和id列之间有什么区别?

下面是ipcs命令的示例输出:

代码语言:javascript
复制
ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 0          ybaumes    600        393216     2          dest         
0x00000000 65537      ybaumes    700        8124648    2          dest         
0x00000000 3932163    ybaumes    700        169376     2          dest         
0x00000000 3604485    ybaumes    600        393216     2          dest         
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-22 19:01:25

首先,共享内存中的'id‘列是指共享内存区域的特定处理程序。如果未获得共享内存区域,则将返回一个负值。因此,基本上,'id‘是由系统生成的,用户对它没有任何控制。

ipcs命令中的“key”列是指在进程间通信资源(如共享内存、消息队列和信号量)中提供的值。‘key’就是key_t类型的整数。此外,关键参数是与信号量ID相关联的访问值。它可以是简单的整数,例如。34562,它可以在创建这些资源时使用相关的get函数传递。需要密钥的地方接受一个特殊的参数IPC_PRIVATE。在这种情况下,系统将生成唯一的密钥,并保证没有其他进程具有相同的密钥。

如果在需要密钥的地方使用IPC_PRIVATE请求资源,则该流程将收到该资源的唯一密钥。由于该资源是用局外人所不知道的唯一密钥标识的,其他进程将无法共享该资源,因此,请求进程可以保证它只拥有和访问该资源。

这个概念在消息队列中使用时会变得更清楚,在消息队列中生成并发送带有特定键值的消息。只有当给定的密钥在接收端匹配时,才能在接收端接收相同的消息。因为返回值也给出消息id,而消息id是根据相应的键值计算的,所以主要的关联是检查资源的唯一性。

票数 5
EN

Stack Overflow用户

发布于 2013-10-22 15:09:38

请参阅shmget(2)的文档。创建时的键是IPC_PRIVATE或0。shmid是该特定shm段的返回值,以便其他进程或系统调用可以引用该段。

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

https://stackoverflow.com/questions/19518607

复制
相关文章

相似问题

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