dio_fcntl
(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)
dio_fcntl — Вызывает функцию библиотеки C fcntl для файлового дескриптора
Описание
Функция dio_fcntl() вызывает указанную в
cmd
команду для fd
.
Если команда требует дополнительных аргументов, то они задаются в
args
.
Список параметров
-
fd
-
Файловый дескриптор, полученный из dio_open().
-
cmd
-
Может быть одной из следующих операций:
-
F_SETLK
- Установка или сброс блокировки. Если блокировка кем-либо удерживается, dio_fcntl() вернет -1. -
F_SETLKW
- похожа наF_SETLK
, но если блокировка кем-либо удерживается, dio_fcntl() будет ждать ее освобождения. -
F_GETLK
- dio_fcntl() вернет ассоциативный массив (как описано ниже) если кто-либо мешает получить блокировку. Если никто не мешает, то ключ "type" будет содержатьF_UNLCK
. -
F_DUPFD
- ищет наименьший доступный файловый дескриптор, больший или равныйargs
и возвращает его. -
F_SETFL
- устанавливает файловому дескриптору флаги, заданные вargs
, такие какO_APPEND
,O_NONBLOCK
илиO_ASYNC
. Для использованияO_ASYNC
вам необходимо воспользоваться модулем PCNTL.
-
-
args
-
args
- это ассоциативный массив, еслиcmd
установлен вF_SETLK
илиF_SETLLW
, со следующими ключами:-
start
- смещение на начало блокировки -
length
- размер заблокированной зоны. 0 означает конец файла -
whence
- зависит от l_start: может бытьSEEK_SET
,SEEK_END
иSEEK_CUR
-
type
- тип блокировки: может бытьF_RDLCK
(чтение),F_WRLCK
(запись) илиF_UNLCK
(блокировки нет)
-
Возвращаемые значения
Возвращает результат вызова C-функции.
Примеры
Пример #1 Установка и снятие блокировки
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// дескриптор файла заблокирован
echo "Нельзя снять блокировку, она удерживается другим процессом.";
} else {
echo "Блокировка успешно установлена/снята";
}
dio_close($fd);
?>
Примечания
Замечание: Для Windows-платформ эта функция не реализована.