Прежде чем воспользоваться разделением памяти, нужно создать разделяемый сегмент с уникальным идентификатором и ассоциированную с ним структуру данных. Уникальный идентификатор называется идентификатором разделяемого сегмента памяти (shmid); он используется для обращений к ассоциированной структуре данных, которая определяется следующим образом:
struct ipc_perm shm_perm; /* Структура прав на выполнение операций */
int shm_segsz; /* Размер сегмента */
struct region *shm_reg; /* Указатель на структуру области памяти */
char pad [4]; /* Информация для подкачки */
ushort shm_lpid; /* Ид-р процесса, вып. последнюю операцию */
ushort shm_cpid; /* Ид-р процесса, создавшего сегмент */
ushort shm_nattch; /* Число присоединивших сегмент */
ushort shm_cnattch; /* Число удерживающих сегмент в памяти */
time_t shm_atime; /* Время последнего присоединения */
time_t shm_dtime; /* Время последнего отсоединения */
time_t shm_ctime; /* Время последнего изменения */
};
Табл. 4 содержит информацию о возможных состояниях разделяемых сегментов памяти:
Бит удержания | Бит подкачки | Бит размещения | Состояние |
Состояния, упомянутые в таблице, таковы:
После того, как создан уникальный идентификатор разделяемого сегмента памяти и ассоциированная с ним структура данных, можно использовать системные вызовы семейства shmop (операции над разделяемыми сегментами) и shmctl (управление разделяемыми сегментами).