为什么当我运行`$ ipcs`时所有共享内存段键都是“0x00000000”?

为什么当我运行`$ ipcs`时所有共享内存段键都是“0x00000000”?

因此,当我运行 时$ ipcs,该shared memory segment部分会返回各种结果:

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 524288     jvn        600        524288     2          dest         
0x00000000 1048577    jvn        600        524288     2          dest         
0x00000000 1769474    jvn        600        393216     2          dest         
0x00000000 753667     jvn        600        524288     2          dest         
0x00000000 1146884    jvn        600        16777216   2         

0x00000000值存在于每个 IPC 对象中,为什么没有不同?这是什么意思?

为了提供更多背景信息,TLDP状态:

为了获得唯一的ID,必须使用密钥。密钥必须由客户端和服务器进程双方同意。这代表了为应用程序构建客户端/服务器框架的第一步。

当您使用电话呼叫某人时,您必须知道他们的号码。此外,电话公司必须知道如何将您的拨出电话中继到最终目的地。一旦对方通过接听电话做出响应,即建立连接。

对于 System V IPC 设施,telephone'' correllates directly with the type of object being used. The电话公司或路由方法可以直接与 IPC 密钥关联。

通过将键值硬编码到应用程序中,键每次都可以是相同的值。这样做的缺点是密钥可能已经在使用中。通常,ftok() 函数用于为客户端和服务器生成键值。

答案1

通过在线课程找到了答案,来自 Linux 基金会认证的系统管理员内容:

请注意,几乎所有当前运行的共享内存段都有一个键00x00000000(也称为 IPC_PRIVATE),这意味着它们仅在具有父/子关系的进程之间共享。

相关内容