Как изменить разделяемую память (shmget / shmat) в C? - PullRequest
5 голосов
/ 01 апреля 2012

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

struct sdata {
    int x;
    int y;
    time_t time;
};

Я создаю общую память для структуры следующим образом:

size_t shmsize = sizeof(struct sdata);
shmid = shmget(IPC_PRIVATE, shmsize, IPC_CREAT | 0666);

Затем я получаю доступ к общей памяти следующим образом:

struct sdata *data = shmat(shared.shmid, (void *) 0, 0);
data->time = time(NULL); // function returns the current time

Мой вопрос довольно прост.Это правильный способ доступа / изменения общей памяти?Это лучший подход?

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

Ответы [ 2 ]

4 голосов
/ 01 апреля 2012

Да, это способ создать, а затем получить доступ или изменить эту общую память. Однако у вас могут быть проблемы с синхронизацией, и вы можете использовать, например, Семафоры Posix для этого. См. Первую sem_overview (7) справочную страницу.

2 голосов
/ 01 апреля 2012

Это правильно, единственное, что следует отметить, это то, что вы создаете сегмент разделяемой памяти PRIVATE, а это значит, что вам придется каким-то образом передавать shmid любому другому процессу, который вы хотите использовать.

...