dio_fcntl
(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5)
dio_fcntl — Esegue la funzione C fcntl su un descrittore di file
Descrizione
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.
Elenco dei parametri
-
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- comeF_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 aF_UNLCK. -
F_DUPFD- trova il più piccolo numero di descrittore di file disponibile che sia maggiore o uguale rispetto adargse lo restituisce. -
F_SETFL - Imposta i flag del descrittore di file al valore specificato daargs. Tale valore può essereO_APPEND,O_NONBLOCKoppureO_ASYNC. Per utilizzareO_ASYNCoccorre utilizzare l'estensione PCNTL.
-
-
args -
Il parametro
argsè un array associativo, nei casi in cuicmdè impostato aF_SETLKoppure aF_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_ENDoSEEK_CUR -
"type" - tipo di lock: può essere
F_RDLCK(lock in lettura),F_WRLCK(lock in scrittura) oppureF_UNLCK(rimozione del lock)
-
Valori restituiti
Restituisce il valore della chiamata C.
Esempi
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);
?>
