[<<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 установлена