PHP - Funzione Direct I / O fcntl ()

La funzione dio_fcntl () può eseguire una funzione fcntl della libreria c sul descrittore fd.

Sintassi

mixed dio_fcntl( resource fd, int cmd [, mixed args] )

La funzione dio_fcntl () può eseguire le operazioni specificate dal parametro "cmd" con un descrittore di file fd, e alcuni comandi richiedono argomenti "args" aggiuntivi.

Un arg è un array associativo quando cmd è impostato su F_SETLK o F_SETLLW con i seguenti tasti: "start" è la combinazione in cui inizia un blocco, "length" è la dimensione di un'area bloccata. zero significa la fine di un file, "goneh" è dove si riferisce a l_start: forse SEEK_SET, SEEK_END e SEEK_CUR, e "type" è un tipo di blocco: può essere F_RDLCK (read lock), F_WRLCK (write lock), o F_UNLCK (sblocco).

Il cmd può essere una delle seguenti operazioni:

  • F_SETLK- Il blocco è impostato o cancellato. Se qualcun altro tiene un blocco, la funzione dio_fcntl () può restituire -1.

  • F_SETLKW - È simile a F_SETLK, ma nel caso in cui un blocco sia tenuto da qualcun altro, la funzione dio_fcntl () può attendere fino al rilascio del blocco.

  • F_GETLK- La funzione dio_fcntl () può restituire un array associativo se qualcun altro impedisce il blocco. Se non ci sono ostacoli, il tasto "tipo" può essere impostato da F_UNLCK.

  • F_DUPFD - Trova il descrittore di file numerato più piccolo maggiore o uguale a arg e può restituirlo.

Esempio

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