Logo CitForum CITForum на CD Форумы Газета Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

SHMOP(2)

НАЗВАНИЕ
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, к сегменту данных вызывающего процесса. Сегмент присоединяется по адресу, заданному одним из следующих способов:

  1. Если значение аргумента shmaddr равно нулю, то сегмент присоединяется по адресу, выбранному системой.
  2. Если значение аргумента shmaddr не равно нулю и выражение (shmflg & SHM_RND) истинно, то сегмент просоединяется по адресу, вычисляемому по формуле (shmaddr - (shmaddr mod SHMLBA)) [см. intro(2)].
  3. Если значение аргумента shmaddr не равно нулю и выражение (shmflg & SHM_RND) ложно, то сегмент присоединяется по адресу, задаваемому аргументом shmaddr.

Отсоединение сегмента
Системный вызов shmdt отсоединяет разделяемый сегмент памяти, расположенный по адресу shmaddr, от сегмента данных вызывающего процесса.

Если выражение (shmflg & SHM_RDONLY) истинно, то сегмент присоединяется для чтения {требуется право на чтение}, в противном случае сегмент присоединяется для чтения и записи {требуется право на чтение и запись}.

Системный вызов shmat завершается неудачей и разделяемый сегмент не присоединяется, если выполнено хотя бы одно из следующих условий:

[EINVAL]
Значение аргумента shmid не является корректным идентификатором разделяемого сегмента.
[EACCES]
У вызывающего процесса нет прав на выполнение операции [см. intro(2)].
[ENOMEM]
В сегменте данных нет места для присоединения разделяемого сегмента.
[EINVAL]
Значение аргумента shmaddr не равно нулю и значение выражения (shmaddr-(shmaddr mod SHMLBA)) не является корректным адресом.
[EINVAL]
Значение аргумента shmaddr не равно нулю, выражение (shmflg & SHM_RND) ложно и значение аргумента shmaddr не является корректным адресом.
[EMFILE]
Количество разделяемых сегментов, присоединенных к вызывающему процессу, превышает максимально допустимую величину.

Системный вызов shmdt завершается неудачей и разделяемый сегмент не отсоединяется, если:

[EINVAL]
Значение аргумента shmaddr не является начальным адресом разделяемого сегмента.

СМ. ТАКЖЕ
exec(2), exit(2), fork(2), intro(2), shmctl(2), shmget(2).

ДИАГНОСТИКА
При успешном завершении системного вызова shmat возвращается начальный адрес присоединенного сегмента.

При успешном завершении системного вызова shmdt результат равен 0.

В случае ошибки возвращается -1, а переменной errno присваивается код ошибки.

ПРИМЕЧАНИЯ
Необходимо явно удалять разделяемый сегмент памяти после того, как удаляется последняя ссылка на него.

СЮРПРИЗЫ
В данной реализации результат системного вызова shmat имеет тип int, а не char *.

Новости мира IT:

Архив новостей

Последние комментарии:

Loading

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2009 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...


Стоит обратить внимание: запчасти митсубиси по лучшим ценам в автотехцентре "КАРАТ-Автосервис".