Книга: UNIX: взаимодействие процессов
14.2. Функция shmget
14.2. Функция shmget
С помощью функции shmget можно создать новый сегмент разделяемой памяти или подключиться к существующему:
#include <sys/shm.h>
int shmget(key_t key, size_t size, int oflag);
/* Возвращает идентификатор разделяемой памяти в случае успешного завершения. –1 –в случае ошибки */
Возвращаемое целочисленное значение называется идентификатором разделяемой памяти. Он используется с тремя другими функциями shmXXX.
Аргумент key может содержать значение, возвращаемое функцией ftok, или константу IPC_PRIVATE, как обсуждалось в разделе 3.2.
Аргумент size указывает размер сегмента в байтах. При создании нового сегмента разделяемой памяти нужно указать ненулевой размер. Если производится обращение к существующему сегменту, аргумент size должен быть нулевым.
Флаг oflag представляет собой комбинацию флагов доступа на чтение и запись из табл. 3.3. К ним могут быть добавлены с помощью логического сложения флаги IPC_CREAT или IPC_CREAT | IPC_EXCL, как уже говорилось в связи с рис. 3.2.
Новый сегмент инициализируется нулями.
Обратите внимание, что функция shmget создает или открывает сегмент разделяемой памяти, но не дает вызвавшему процессу доступа к нему. Для подключения сегмента памяти предназначена функция shmat, описанная в следующем разделе.