PHP - Función fcntl () de E / S directa
La función dio_fcntl () puede realizar una función fcntl de la biblioteca c en el descriptor fd.
Sintaxis
mixed dio_fcntl( resource fd, int cmd [, mixed args] )
La función dio_fcntl () puede realizar las operaciones especificadas por el parámetro "cmd" con un descriptor de archivo fd, y algunos comandos requieren argumentos "args" adicionales.
Un arg es una matriz asociativa cuando cmd se establece en F_SETLK o F_SETLLW con las siguientes claves: "inicio" es la mezcla donde comienza un bloqueo, "longitud" es el tamaño de un área bloqueada. cero significa el final de un archivo, "wenth" es donde se refiere a l_start: tal vez SEEK_SET, SEEK_END y SEEK_CUR, y "type" es un tipo de bloqueo: puede ser F_RDLCK (bloqueo de lectura), F_WRLCK (bloqueo de escritura), o F_UNLCK (desbloquear).
El cmd puede ser una de las siguientes operaciones:
F_SETLK- El bloqueo está activado o desactivado. Si alguien más mantiene un bloqueo, la función dio_fcntl () puede devolver -1.
F_SETLKW - Es similar a F_SETLK, pero en el caso de que otra persona mantenga un bloqueo, la función dio_fcntl () puede esperar hasta que se libere el bloqueo.
F_GETLK- La función dio_fcntl () puede devolver una matriz asociativa si alguien más evita el bloqueo. Si no hay obstáculos, la tecla "tipo" se puede configurar con F_UNLCK.
F_DUPFD - Encuentra el descriptor de archivo numerado más pequeño, mayor o igual que arg, y puede devolverlo.
Ejemplo
<?php
$fd = dio_open("/dev/ttyS0", O_RDWR);
if(dio_fcntl($fd, F_SETLK, Array("type" => F_WRLCK)) == -1) {
echo "The lock can not be cleared. It is held by someone else";
} else {
echo "Lock succesfully set/cleared";
}
dio_close($fd);
?>