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);
?>