Чтение данных из блока разделяемой
shmop_read
Чтение данных из блока разделяемой памяти
string shmop_read (int shmid, int start, nnt count)
Возвращает прочитанную строку данных размером count байтов, начиная со смещения start, из блока, указанного дескриптором shmid.
shmop_write
Запись данных в блок разделяемой памяти
int shmop_write (int shmid, string data, int offset)
Записывает строку данных data в блок, указанный дескриптором shmid, по относительному адресу (смещению от начала блока) offset.
shmop_delete
Удаление блока разделяемой памяти
int shmop_delete (int shmid)
В аргументе shmid указывается дескриптор блока.
В случае успеха возвращает 1, а при ошибке — 0.
shmop_close
Закрытие блока разделяемой памяти
int shmop_close (int shmid)
В аргументе shrald указывается дескриптор блока.
Семафоры
Данная группа функций позволяет использовать семафоры и разделяемую память (System V). Семафоры могут использоваться для реализации доступа к системным ресурсам в эксклюзивном режиме (или ограничивать число процессов, одновременно использующих один ресурс). Сами по себе семафоры не защищают от одновременного использования ресурса, а используются для синхронизации.
Операционные системы Unix имеют следующие ограничения:
SHMMAX — максимальный размер блока разделяемой памяти, обычно 131 072 байта;
SHMMIN — минимальный размер блока разделяемой памяти, обычно 1 байт;
SHMMNI — максимальное число блоков разделяемой памяти в системе, обычно 100;
SHMSEG — максимальное число блоков разделяемой памяти для одного процесса, обычно 6.
Эти функции не работают в Windows.
sem_get
Получение дескриптора семафора
int sem_get (int key [, int max_acquire [, int perm]])
Возвращает дескриптор семафора с идентификатором key или FALSE — при ошибке.
При отсутствии такого семафора он создается, и в аргументах тах_ acquire и perm можно задать: число процессов, которые могут заблокировать этот семафор (по умолчанию 1 — «никакой процесс, кроме данного»), и нрава доступа к нему (по умолчанию 0666).
См. также: sem_acquire() и sem_release().
Содержание Назад Вперед