Shared-memory-ID всегда равен 0 в контейнере Docker - PullRequest
0 голосов
/ 24 июня 2019

Я хочу общаться между двумя контейнерами док-станции, используя общую память.В обоих контейнерах запущена простая программа на Си.

Я попробовал этот пример, и он работает очень хорошо: Общая память с контейнерами Docker (версия 1.4.1 Docker)

Однако, когда я создаю новую область общей памяти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);

Я ожидаю, что идентификатор не всегда будет равен 0 и будет другим, когда другойключ используется.

1 Ответ

0 голосов
/ 24 июня 2019

Я ожидаю, что идентификатор не всегда будет равен 0 и будет другим, если используется другой ключ.

Проблема в том, что ваши ожидания необоснованны. Идентификатор, возвращаемый shmget(), представляет собой локальный идентификатор в вашей программе, по своей природе похожий на дескриптор файла. Придерживаясь аналогии с файлом, именно ключ играет роль имени файла - глобального идентификатора. Спецификации говорят только о том, что действительные идентификаторы совместно используемой памяти неотрицательны, но для них естественно быть пронумерованными от нуля.

Если вы одновременно открываете второй отдельный сегмент совместно используемой памяти, вы должны увидеть другой назначенный ему идентификатор совместно используемой памяти. Вероятно 1.

...