PHP - Função fcntl () de E / S direta
A função dio_fcntl () pode executar uma função fcntl da biblioteca c no descritor fd.
Sintaxe
mixed dio_fcntl( resource fd, int cmd [, mixed args] )
A função dio_fcntl () pode realizar as operações especificadas pelo parâmetro "cmd" com um descritor de arquivo fd, e alguns comandos requerem argumentos "args" adicionais.
Um arg é um array associativo quando cmd é definido como F_SETLK ou F_SETLLW com as seguintes chaves: "start" é a combinação onde um bloqueio começa, "length" é o tamanho de uma área bloqueada. zero significa o fim de um arquivo, "wenth" é onde se refere a l_start: talvez SEEK_SET, SEEK_END e SEEK_CUR, e "tipo" é um tipo de bloqueio: pode ser F_RDLCK (bloqueio de leitura), F_WRLCK (bloqueio de gravação), ou F_UNLCK (desbloquear).
O cmd pode ser uma das seguintes operações -
F_SETLK- O bloqueio é definido ou limpo. Se um bloqueio for mantido por outra pessoa, a função dio_fcntl () pode retornar -1.
F_SETLKW - É semelhante a F_SETLK, mas no caso de um bloqueio ser mantido por outra pessoa, a função dio_fcntl () pode esperar até que o bloqueio seja liberado.
F_GETLK- A função dio_fcntl () pode retornar um array associativo se qualquer outra pessoa impedir o bloqueio. Se não houver obstáculos, a chave "tipo" pode ser definida por F_UNLCK.
F_DUPFD - Encontra o menor descritor de arquivo numerado maior ou igual a arg e pode retorná-lo.
Exemplo
<?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);
?>