mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

SHMOP(2)                                               SHMOP(2)

НАЗВАНИЕ 
	shmop - операции над разделяемыми сегментами памяти

СИНТАКСИС 
        #include 
        #include 
        #include 
        
        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 *.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк