shmop_open
(PHP 4 >= 4.0.4, PHP 5)
shmop_open — Резервирование или использование блока разделяемой памяти
Описание
int shmop_open
( int $key
, string $flags
, int $mode
, int $size
)
Список параметров
-
key
-
Системный идентификатор блока разделяемой памяти.
Может быть задан в десятичной или шестнадцатеричной кодировке.
-
flags
-
Доступные для использования флаги:
-
"a" для доступа (устанавливает флаг SHM_RDONLY)
Следует применять этот флаг, когда необходимо использовать
ранее зарезервированный участок разделяемой памяти, уже содержащий
какие-либо данные. В этом случае доступ возможен только для операций
чтения.
-
"c" для резервирования (устанавливает флаг IPC_CREATE)
Следует применять этот флаг для создания нового зарезервированного
участка разделяемой памяти. Если участок памяти с таким
идентификатором уже существует, выполняется попытка доступа к нему
для последующих операций чтения и записи.
-
"w" для выполнения операций чтения и записи
Следует применять этот флаг для чтения и записи данных, хранимых
в разделяемой памяти. Данный флаг используется в большинстве
случаев.
-
"n" для создания в памяти нового сегмента
(устанавливает флаг IPC_CREATE|IPC_EXCL)
Следует применять этот флаг для создания нового сегмента в
разделяемой памяти, но если сегмент уже существует с тем же флагом,
происходит отказ. Это полезно в целях безопасности, т.к. позволяет
избежать ошибок синхронизации (Race condition exploits).
-
mode
-
Права доступа к участку памяти такие же, как к обычному файлу.
Их можно указывать в восьмеричноv виде, например 0644.
-
size
-
Размер резервируемого блока в разделяемой памяти в байтах
Замечание:
Обратите внимание: Третий и четвертый параметры должны быть указаны как 0,
если необходимо получить доступ к существующему участку памяти.
Возвращаемые значения
При успешном выполнении shmop_open() возвращается
идентификатор, который может быть в дальнейшем использован для доступа
к зарезервированному участку памяти.
Примеры
Пример #1 Резервирование участка разделяемой памяти
<?php
$shm_key = ftok(__FILE__, 't');
$shm_id = shmop_open($shm_key, "c", 0644, 100);
?>
В приведенном примере выполняется доступ к блоку с идентификатором,
возвращаемым функцией ftok().