(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5)
dio_fcntl — Esegue la funzione C fcntl su un descrittore di file
La funzione dio_fcntl() esegue le operazioni
specificate dal parametro cmd
sul descrittore
di file fd
. Qualora i comandi richiedano
informazioni addizionali occorre valorizzare args
con tali informazioni.
Nota: Questa funzione non è implementata sulle piattaforme Windows.
fd
Descrittore di file restituito da dio_open().
cmd
Può indicare una delle seguenti operazioni:
F_SETLK
- imposta o azzera un lock. Se il lock è impostato
da un'altro processo la funzione dio_fcntl() restituisce
-1.
F_SETLKW
- come F_SETLK
, ma nel caso in cui il lock sia impostato da
un'altro processo la funzione dio_fcntl() attende
sino a quando il blocco non viene rimosso.
F_GETLK
- la dio_fcntl() restituisce un array
associativo (come descritto precedentemente) se qualche altro processo
impedisce il lock. Se non vi sono problemi la chiave "type" sarà impostata
a F_UNLCK
.
F_DUPFD
- trova il più piccolo numero di descrittore di file disponibile
che sia maggiore o uguale rispetto ad args
e lo restituisce.
F_SETF
L - Imposta i flag del descrittore di file al valore specificato da
args
. Tale valore può essere O_APPEND
,
O_NONBLOCK
oppure O_ASYNC
. Per utilizzare
O_ASYNC
occorre utilizzare l'estensione
PCNTL.
args
Il parametro args
è un array associativo, nei casi in cui
cmd
è impostato a F_SETLK
oppure a F_SETLLW
, contiene
le seguenti chiavi:
"start" - offset da cui comincia il lock
"length" - dimensione dell'area bloccata, zero significa fine file
"wenth" - a cosa l_start è relativo:
può valere SEEK_SET
,
SEEK_END
o SEEK_CUR
"type" - tipo di lock: può essere F_RDLCK
(lock in lettura),
F_WRLCK
(lock in scrittura) oppure
F_UNLCK
(rimozione del lock)
Restituisce il valore della chiamata C.
Example #1 Impostare e cancellare un lock
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// the file descriptor appears locked
echo "The lock can not be cleared. It is held by someone else.";
} else {
echo "Lock succesfully set/cleared";
}
dio_close($fd);
?>