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($fdF_SETLK, Array("type"=>F_WRLCK)) == -1) {
   
// дескриптор файла заблокирован
   
echo "Нельзя снять блокировку, она удерживается другим процессом.";
} else {
   echo 
"Блокировка успешно установлена/снята";
}

dio_close($fd);
?>

Примечания

Замечание: Для Windows-платформ эта функция не реализована.