Forum und email

dio_fcntl

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

dio_fcntl — Realiza una operación del tipo fcntl de la librería de C sobre el descriptor de archivo indicado por el parámetro fd

Descripción

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

La función dio_fcntl() realiza las operaciones indicadas por el parámetro cmd sobre el descriptor fd . Algunas operaciones requieren argumentos indicados mediante el parámetro args .

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

Lista de parámetros

fd

El descriptor de archivo devuelto por dio_open().

cmd

Puede indicar una de las siguientes operaciones:

  • F_SETLK - Crea o libera el bloqueo. Si alguien mantiene el bloqueo, la función dio_fcntl() devuelve -1.

  • F_SETLKW - es como F_SETLK, pero en este caso si alguien mantiene el bloqueo, la función dio_fcntl() espera hasta que el bloqueo se libera.

  • F_GETLK - dio_fcntl() devuelve una matriz asociativa (detallada más adelante) si alguien mantiene el bloqueo. Si el bloqueo ha sido liberado, el valor de "type" pasará a ser F_UNLCK.

  • F_DUPFD - determina el descriptor de archivo disponible con la numeración más baja posible que sea mayor o igual que la indicada por el parámetro args y devuelve ese descriptor.

  • F_SETFL - establece el valor de los flags del descriptor de archivo al valor especificado por el parámetro args , que puede ser O_APPEND, O_NONBLOCK o O_ASYNC. Para emplear O_ASYNC es necesario disponer de la extensión PCNTL.

args

args es una matriz asociativa cuando cmd es F_SETLK o F_SETLLW. Las claves de la matriz son las siguientes:

  • "start" - posición en la que comienza el bloqueo

  • "length" - longitud del área bloqueada. Un valor igual a cero significa el final del archivo..

  • "wenth" - posición respecto al que el valor start es relativo: puede ser SEEK_SET, SEEK_END y SEEK_CUR

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

Valores retornados

Devuelve el mismo valor devuelto por la función de C.

Ejemplos

Example#1 Crear y liberar un bloqueo

<?php

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

if (
dio_fcntl($fdF_SETLK, Array("type"=>B">$fd
F_SETLK, Array("type"=>F_WRLCK)) == -1) {
   
// El descriptor del archivo está bloqueado
   
echo "El bloqueo no ha podido ser liberado.";
} else {
   echo 
"El bloqueo ha sido creado/liberado con éxito";
}

dio_close($fd);
?>