структура c в разделяемой памяти - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть структура, как

struct board{
   char name;
   int values[37];
}board

Представьте себе игру, в которой несколько игроков играют за одним столом, и все они делают разные ставки на разные позиции массива значений. Имя доски уникально, и игрок входит в игру с указанием имени доски. Если 2 или более игроков вводят одно и то же имя доски, они все присоединяются к одной и той же игре.

Мне нужно поместить эту структуру в общую память и получить доступ / изменить содержимое «значений»
из разных процессов одновременно (семафоры не проблема). Мне удалось скопировать структуру в часть общей памяти, но я не знаю, как получить доступ к имени, чтобы увидеть, существует ли плата и тому подобное.

Это для школьного проекта, и я немного отчаялся ... пожалуйста, помогите и спасибо. Кстати, в разделяемой памяти я хочу ссылки на POSIX os

1 Ответ

4 голосов
/ 10 ноября 2011

Функции совместно используемой памяти POSIX уже написаны с учетом таких усилий:

int shm_open(const char *name, int oflag, mode_t mode);

Если вы используете "/onica_game_<name>" для параметра *name, вы можете легко указать, к каким сегментам разделяемой памяти подключаться для ваших общих игр. (Между прочим, один char немного ограничивает названия игр. Возможно, вы захотите использовать char name[32]; или что-то большее, чтобы дать людям возможность назвать свои игры чем-то более значимым.)

Я предлагаю добавить к имени префикс onica_game_, поскольку пространство имен для сегментов разделяемой памяти POSIX является общесистемным.

...