共享内存:key 和 id 有什么区别?

yve*_*mes 4 linux ipc shared-memory

调用时ipcs -akey列和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         
Run Code Online (Sandbox Code Playgroud)

pRA*_*ANT 5

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

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

如果在需要密钥的地方使用 IPC_PRIVATE 请求资源,该进程将收到该资源的唯一密钥。由于该资源由外部未知的唯一密钥标识,因此其他进程将无法共享该资源,因此,请求进程可以保证它独占该资源并对其进行访问。

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