Шрифт:
Если совместно используемая память создана успешно,
shmat
Когда вы впервые создаете сегмент совместно используемой памяти, он недоступен ни одному процессу. Для того чтобы обеспечить доступ к совместно используемой памяти, нужно присоединить ее к адресному пространству процесса. Делается это с помощью функции
Первый параметр
Второй параметр
Третий параметр
Если вызов
Наличие доступа для чтения совместно используемой памяти и записи в нее зависит от владельца (создателя сегмента совместно используемой памяти), прав доступа и владельца текущего процесса. Права доступа к совместно используемой памяти подобны правам доступа к файлам.
Исключение из этого правила возникает, если выражение
shmdt
Функция
shmctl
Функции управления совместно используемой памятью (к счастью) гораздо проще аналогичных, но более сложных функций для семафоров:
У структуры типа
Первый параметр
Второй параметр
Таблица 14.2
Значение | Описание |
---|---|
IPC_STAT | Задаёт данные в структуре shmid_ds , отображающие значения, связанные с совместно используемой памятью |
IPC_SET | Устанавливает значения, связанные с совместно используемой памятью в соответствии с данными из структуры типа shmid_ds , если у процесса есть право на это действие |
IPC_RMID | Удаляет сегмент совместно используемой памяти |
Третий параметр
В случае успеха возвращает 0, в случае ошибки — -1. В стандарте X/Open не описано, что произойдет, если вы попытаетесь удалить присоединенный к процессу сегмент совместно используемой памяти. Обычно присоединенный, но удаленный сегмент совместно используемой памяти продолжает функционировать до тех пор, пока не будет отсоединен от последнего процесса. Но поскольку это поведение не задано в стандарте, на него лучше не рассчитывать.