dio_fcntl

(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)

dio_fcntlВызывает функцию библиотеки C fcntl для файлового дескриптора

Описание

dio_fcntl(resource $fd, int $cmd, mixed $args = ?): mixed

Функция 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-платформ эта функция не реализована.

add a note add a note

User Contributed Notes 1 note

up
-8
Guillermo Prandi
11 years ago
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.
To Top