НАЗВАНИЕ
shmop - операции над разделяемыми сегментами памяти
СИНТАКСИС
#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> char *shmat (shmid, shmaddr, shmflg) int shmid; char *shmaddr; int shmflg; int shmdt (shmaddr) char *shmaddr;
ОПИСАНИЕ
Присоединение сегмента
Системный вызов shmat (см. СЮРПРИЗЫ) присоединяет разделяемый сегмент памяти, ассоциированный с идентификатором shmid, к сегменту данных вызывающего процесса.
Сегмент присоединяется по адресу, заданному одним из
следующих способов:
Отсоединение сегмента
Системный вызов shmdt отсоединяет разделяемый сегмент
памяти, расположенный по адресу shmaddr, от сегмента
данных вызывающего процесса.
Если выражение (shmflg & SHM_RDONLY) истинно, то сегмент присоединяется для чтения {требуется право на чтение}, в противном случае сегмент присоединяется для чтения и записи {требуется право на чтение и запись}.
Системный вызов shmat завершается неудачей и разделяемый сегмент не присоединяется, если выполнено хотя бы одно из следующих условий:
Системный вызов shmdt завершается неудачей и разделяемый сегмент не отсоединяется, если:
СМ. ТАКЖЕ
exec(2), exit(2), fork(2), intro(2), shmctl(2),
shmget(2).
ДИАГНОСТИКА
При успешном завершении системного вызова shmat возвращается начальный адрес присоединенного сегмента.
При успешном завершении системного вызова shmdt результат равен 0.
В случае ошибки возвращается -1, а переменной errno присваивается код ошибки.
ПРИМЕЧАНИЯ
Необходимо явно удалять разделяемый сегмент памяти после того, как удаляется последняя ссылка на него.
СЮРПРИЗЫ
В данной реализации результат системного вызова shmat
имеет тип int, а не char *.