Docker容器中的共享内存ID始终为0

时间:2019-06-24 13:33:43

标签: c docker containers shared-memory id

我想使用共享内存在两个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,并且使用不同的密钥时ID也会有所不同。

1 个答案:

答案 0 :(得分:0)

  

我希望ID不会一直为0,并且使用不同的密钥时ID也会有所不同。

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

如果同时打开第二个不同的共享内存段,则应该看到分配了另一个共享内存ID。大概是1。