Операционная система UNIX. Руководство программиста


Использование операций


В статье shmop(2) Справочника программиста синтаксис упомянутых системных вызовов описан так:

#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h>

int shmat (shmid, shmaddr, shmflg) int shmid; char *shmaddr; int shmflg;

int shmdt (shmaddr) char *shmaddr;

4.4.1.1. Присоединение сегментов

При успешном завершении системного вызова shmat() результат равен адресу, который получил присоединенный сегмент; в случае неудачи возвращается -1. Разумеется, чтобы использовать результат shmat() как указатель, его нужно преобразовать к требуемому типу.

В качестве аргумента shmid должен выступать идентификатор разделяемого сегмента, предварительно полученный при помощи системного вызова shmget(2).

Аргумент shmaddr задает адрес, по которому сегмент должен быть присоединен, то есть тот адрес в виртуальном пространстве пользователя, который получит начало сегмента. Не всякий адрес является приемлемым. Можно порекомендовать адреса вида

0x80000000 0x80040000 0x80080000 . . .

Если значение shmaddr равно нулю, система выбирает адрес присоединения по своему усмотрению.

Аргумент shmflg используется для передачи системному вызову shmat() флагов SHM_RND и SHM_RDONLY. Наличие первого из них оз- начает, что адрес shmaddr следует округлить до некоторй системно-зависимой величины [подробнее см. статью shmop(2) в Справочнике программиста]. Второй флаг предписывает присоединить сегмент только для чтения; если он не установлен, присоединенный сегмент будет доступен и на чтение, и на запись (если процесс обладает соответствующими правами).

4.4.1.2. Отсоединение сегментов

При успешном завершении системного вызова shmdt() результат равен нулю; в случае неудачи возвращается -1.

Аргумент shmaddr задает начальный адрес отсоединяемого сегмента.

Напомним, что после того, как последний процесс отсоединил разделяемый сегмент памяти, этот сегмент вместе с идентификатором и ассоциированной структурой данных следует удалить с помощью системного вызова shmctl(2).




Начало  Назад  Вперед



Книжный магазин