我想使用共享内存在两个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也会有所不同。
答案 0 :(得分:0)
我希望ID不会一直为0,并且使用不同的密钥时ID也会有所不同。
问题是您的期望没有根据。 shmget()
返回的ID是程序中的 local 标识符,其本质类似于文件句柄。坚持使用文件类比,它是扮演文件名(全局标识符)角色的关键。规范只说有效的共享内存ID是非负数,但是自然地,它们从零开始编号。
如果同时打开第二个不同的共享内存段,则应该看到分配了另一个共享内存ID。大概是1。