(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5, PHP 7)
dio_fcntl — Exécute une fonction fichier de langage C
dio_fcntl() exécute l'opération
cmd
sur le fichier représenté par la
ressource fd
. Certaines commandes demandent
des arguments supplémentaires qui sont fournis dans l'argument
args
.
fd
La ressource de fichier retournée par dio_open().
cmd
Peut être une de ces opérations suivantes :
F_SETLK
: le verrou est posé ou levé. Si le
verrou appartient à un autre utilisateur, dio_fcntl()
retourne -1.
F_SETLKW
: identique à
F_SETLK
, mais si le verrou appartient à quelqu'un
d'autre, dio_fcntl() attend la levée du verrou.
F_GETLK
: dio_fcntl() retourne
un tableau associatif (comme décrit ci-dessus) si un autre utilisateur
empêche la poste d'un verrou. S'il n'y a aucun empêchement,
l'entrée "type" prendra la valeur F_UNLCK
.
F_DUPFD
: trouve les numéros de ressource de fichier
les plus petits, disponibles, inférieurs ou égales à
args
et les retourne.
F_SETFL
: configure les descripteurs de fichier
à la valeur spécifiée par args
, qui peut être
O_APPEND
, O_NONBLOCK
ou
O_ASYNC
. Pour utiliser
O_ASYNC
vous aurez besoin de l'extension
PCNTL.
args
args
est un tableau associatif lorsque
cmd
vaut F_SETLK
ou F_SETLLW
, avec les entrées suivantes :
start : offset de début de verrou
length : taille de la surface verrouillée. Zéro indique la fin du fichier
whence : l_start est relatif à : peut être
SEEK_SET
, SEEK_END
et
SEEK_CUR
type : type de verrou. peut être
F_RDLCK
(verrou en lecture),
F_WRLCK
(verrou en écriture) ou
F_UNLCK
(déverrouillage)
Retourne le résultat d'un appel en C.
Exemple #1 Positionnement et suppression d'un verrou
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// le descripteur de fichier semble verrouillé
echo "Le verrou n'a pu être effacé. Il a été posé par quelqu'un d'autre.";
} else {
echo "Le verrou a été défini/verrouillé avec succès";
}
dio_close($fd);
?>
Note: Cette fonction n'est pas implémentée sous Windows.