【问题标题】:Shared-memory-ID is always 0 in a docker containerShared-memory-ID 在 docker 容器中始终为 0
【发布时间】:2019-06-24 13:33:43
【问题描述】:

我想使用共享内存在两个 docker 容器之间进行通信。在这两个容器中,一个简单的 C 程序正在运行。

我试过这个例子,效果很好:Shared Memory with Docker containers (docker version 1.4.1)

但是,当我创建一个新的共享内存区域时,Shared-Memory-ID 始终为“0”。我已经尝试使用通过ftok() 生成的密钥并使用密钥IPC_PRIVATE

key_t key = ftok("shmfile", 65);
int shmid = shmget(key, 1024, IPC_CREAT | 0666);

printf("%d \n", shmid);

void *shmdata = shmat(shmid, NULL, 0);

我希望 ID 不会始终为 0,并且在使用不同的密钥时会有所不同。

【问题讨论】:

    标签: c docker containers shared-memory


    【解决方案1】:

    我希望 ID 不会始终为 0,并且在使用不同的密钥时会有所不同。

    问题是你的期望是没有根据的。 shmget() 返回的 ID 是您程序中的 本地 标识符,本质上类似于文件句柄。坚持文件类比,它是扮演文件名角色的关键——全局标识符。规范只说有效的共享内存 ID 是非负的,但它们从零开始编号是很自然的。

    如果您同时打开第二个不同的共享内存段,那么您应该会看到分配给它的不同共享内存 ID。可能是 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多