НАЗВАНИЕ
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 завершается неудачей и разделяемый сегмент не присоединяется, если выполнено хотя бы одно из следующих условий:
[EINVAL] Значение аргумента shmid не является корректным идентификатором разделяемого сегмента. [EACCES] У вызывающего процесса нет прав на выполнение операции [см. ]. [ENOMEM] В сегменте данных нет места для присоединения разделяемого сегмента. [EINVAL] Значение аргумента shmaddr не равно нулю и значение выражения (shmaddr-(shmaddr mod SHMLBA)) не является корректным адресом. [EINVAL] Значение аргумента shmaddr не равно нулю, выражение (shmflg & SHM_RND) ложно и значение аргумента shmaddr не является корректным адресом. [EMFILE] Количество разделяемых сегментов, присоединенных к вызывающему процессу, превышает максимально допустимую величину.