Actually, there's a small typo in the above docs. The parameter for where l_start is relative to is actually "whence" and not "wenth" like stated.
(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-платформ эта функция не реализована.
Actually, there's a small typo in the above docs. The parameter for where l_start is relative to is actually "whence" and not "wenth" like stated.