Linux 共享内存:什么&x27;钥匙和身份证的区别是什么?

Linux 共享内存:什么&x27;钥匙和身份证的区别是什么?,linux,ipc,shared-memory,Linux,Ipc,Shared Memory,调用ipcs-a时,key列和id列之间有什么区别 以下是ipcs命令的输出示例: ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 0 ybaumes 600 393216 2 dest 0

调用
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         

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

首先,共享内存中的“id”列引用共享内存区域的特定处理程序。如果未获得共享内存区域,它将返回负值。所以基本上,“id”是由系统生成的,用户对它没有任何控制权

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

如果在需要密钥的位置使用IPC_PRIVATE请求资源,则该进程将收到该资源的唯一密钥。由于该资源由外部未知的唯一密钥标识,因此其他进程将无法共享该资源,因此,请求进程将被保证以独占方式拥有和访问该资源

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