(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)
dio_fcntl — Lleva a cabo la función fcntl de la biblioteca C en el fichero fd
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
.
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)
Devuelve el resultado de la llamada a C.
Ejemplo #1 Bloqueando y desbloqueando
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($fd, F_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);
?>
Nota: Esta función no está implementada en plataformas Windows.