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