(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
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.
El descriptor de archivo devuelto por dio_open().
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 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)
Devuelve el mismo valor devuelto por la función de C.
Example#1 Crear y liberar un bloqueo
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($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);
?>