[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Создание/получение разделяемой памяти
Для этой цели используется вызов shmget(2). Его параметры:
Значение key может быть получено с использованием ftok(3) или
установлено в IPC_PRIVATE.
size - размер сегмента в байтах. shmflg управляет созданием и правами
доступа к сегменту. Допустимые установленные биты:
. IPC_CREAT - если идентификатора разделяемого сегмента с таким
ключом нет, он создается.
. IPC_EXCL - только совместно с IPC_CREAT. Разделяемый сегмент
создается тогда и только тогда, когда он не существует, т.е. этот
бит задает исключительное право создания.
. Девять младших бит shmflg задают права доступа. Для разделяемого
сегмента это могут быть права чтения и записи.
Системный вызов shmget(2) ограничен следующими системными параметрами
(здесь приведены значения для AT&T 3B2):
SHMMAX Максимальный размер сегмента разделяемой памяти. Значение по
умолчанию, оно же максимальное, равно 131,072.
SHMMIN Минимальный размер выделенного сегмента в байтах. По
умолчанию 1.
SHMMNI Ограничение на количество разделяемых сегментов в системе.
По умолчанию 100.
SHMSEG Ограничение количества разделяемых сегментов, присоединенных
к процессу. По умолчанию 6.
Этот системный вызов не позволяет процессу использовать память. Он
только находит требуемое количество памяти и резервирует ее для
процесса. shmget(2) связывает эту память с идентификатором разделяемой
памяти и возвращает его.
СОЗДАНИЕ/ПОЛУЧЕНИЕ РАЗДЕЛЯЕМОЙ ПАМЯТИ
shmget(2)
ИМЯ
shmget - получить доступ к разделяемому сегменту памяти
ИСПОЛЬЗОВАНИЕ
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget (key_t key, int size, int shmflg)
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
успех - неотрицательный идентификатор разделяемого сегмента
неуспех - -1 и errno установлена