dio_fcntl

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

dio_fcntlLleva a cabo la función fcntl de la biblioteca C en el fichero fd

Descripción

dio_fcntl ( resource $fd , int $cmd [, mixed $args ] ) : mixed

La función dio_fcntl() realiza la operación especificada por cmd sobre el descriptor de fichero fd. Algunos comandos requieren que se proporcionen parámetros adicionales en args.

Parámetros

fd

Descriptor de fichero devuelto por dio_open().

cmd

Puede ser una de las siguientes operaciones:

  • F_SETLK - Se asigna o quita el bloqueo. Si está bloqueado por otro proceso, dio_fcntl() devuelve -1.

  • F_SETLKW - como F_SETLK, pero en caso de que esté bloqueado por otro proceso, dio_fcntl() espera a que éste se libere.

  • F_GETLK - dio_fcntl() devuelve un array asociativo (como se describe a continuación) si algún proceso previene el bloqueo. Si no hubiera impedimento, se asignará la clave "type" a F_UNLCK.

  • F_DUPFD - encuentra el número de descriptor más bajo disponible que sea igual o superior a args y lo devuelve.

  • F_SETFL - Establece al descriptor de fichero las banderas especificadas en args, de entre O_APPEND, O_NONBLOCK o O_ASYNC. Para usar O_ASYNC debe usarse la extensión PCNTL.

args

args es un array asociativo, cuando cmd sea F_SETLK o F_SETLLW, con las siguientes claves:

  • start - posición donde comienza el bloqueo

  • length - tamaño del area bloqueada. Cero significa hasta el final del fichero

  • whence - Desde dónde se contabiliza l_start: puede ser SEEK_SET, SEEK_END y SEEK_CUR

  • type - tipo de bloqueo: puede ser F_RDLCK (bloqueo de lectura), F_WRLCK (bloqueo de escritura) o F_UNLCK (desbloqueo)

Valores devueltos

Devuelve el resultado de la llamada a C.

Ejemplos

Ejemplo #1 Bloqueando y desbloqueando

<?php

$fd 
dio_open('/dev/ttyS0'O_RDWR);

if (
dio_fcntl($fdF_SETLK, Array("type"=>F_WRLCK)) == -1) {
   
// parece el descriptor de fichero está bloqueado
   
echo "No se puede desbloquear. Pertenece a algún otro proceso.";
} else {
   echo 
"Bloqueo/desbloqueo con éxito";
}

dio_close($fd);
?>

Notas

Nota: Esta función no está implementada en plataformas Windows.