当调用ipcs -a时,key列和id列之间有什么区别?
下面是ipcs命令的示例输出:
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 发布于 2013-10-22 19:01:25
首先,共享内存中的'id‘列是指共享内存区域的特定处理程序。如果未获得共享内存区域,则将返回一个负值。因此,基本上,'id‘是由系统生成的,用户对它没有任何控制。
ipcs命令中的“key”列是指在进程间通信资源(如共享内存、消息队列和信号量)中提供的值。‘key’就是key_t类型的整数。此外,关键参数是与信号量ID相关联的访问值。它可以是简单的整数,例如。34562,它可以在创建这些资源时使用相关的get函数传递。需要密钥的地方接受一个特殊的参数IPC_PRIVATE。在这种情况下,系统将生成唯一的密钥,并保证没有其他进程具有相同的密钥。
如果在需要密钥的地方使用IPC_PRIVATE请求资源,则该流程将收到该资源的唯一密钥。由于该资源是用局外人所不知道的唯一密钥标识的,其他进程将无法共享该资源,因此,请求进程可以保证它只拥有和访问该资源。
这个概念在消息队列中使用时会变得更清楚,在消息队列中生成并发送带有特定键值的消息。只有当给定的密钥在接收端匹配时,才能在接收端接收相同的消息。因为返回值也给出消息id,而消息id是根据相应的键值计算的,所以主要的关联是检查资源的唯一性。
发布于 2013-10-22 15:09:38
请参阅shmget(2)的文档。创建时的键是IPC_PRIVATE或0。shmid是该特定shm段的返回值,以便其他进程或系统调用可以引用该段。
https://stackoverflow.com/questions/19518607
复制相似问题