dio_fcntl
(PHP 4 >= 4.2.0, PHP 5 < 5.1.0)
dio_fcntl — Modifiziert einen Dateideskriptor
Beschreibung
Die Funktion dio_fcntl() führt die mit
cmd festgelegte Operation auf dem
Dateideskriptor fd aus. Für einige
dieser Operationen müssen zusätzliche Argumente im
Parameter args übergeben werden.
Parameter-Liste
-
fd -
Ein von dio_open() zurückgegebener Dateideskriptor.
-
cmd -
Eine der folgenden Operationen:
-
F_SETLK- Setzt oder löscht eine Dateisperre. Wenn diese Sperre bereits von jemand anderem gehalten wird, gibt dio_fcntl() -1 zurück. -
F_SETLKW- ähnlichF_SETLK, hier wird aber in dem Fall, dass bereits jemand anderes die Sperre hält, gewartet bis diese wieder freigegeben wird. -
F_GETLK- dio_fcntl() gibt ein assoziatives Array mit Informationen (wie weiter unten beschrieben) zurück, wenn jemand anderes bereits eine Sperre hält. Existiert keine andere Sperre, wird das Element "type" aufF_UNLCKgesetzt. -
F_DUPFD- Findet den kleinsten verfügbaren Dateideskriptor >=argsund gibt diesen zurück. -
F_SETFL- Setzt die Flags des Dateideskriptors auf den inargsangegebenen Wert. Die verfügbaren Flags sindO_APPEND,O_NONBLOCKundO_ASYNC. UmO_ASYNCsetzen zu können, benötigen Sie die PCNTL-Extension.
-
-
args -
Die
cmd-OperationenF_SETLKundF_SETLLWerwarten ein Array mit den folgenden Elementen:-
start- Offset an dem die Sperre beginnt -
length- Länge des gesperrten Bereichs, 0 bedeutet dabei "bis zum Dateiende" -
whence- Die Position, auf die sichstartbezieht, dabei stehtSEEK_SETfür den Dateianfang,SEEK_ENDfür das Dateiende undSEEK_CURfür die aktuelle Schreib-/Leseposition. -
type- Art der Sperre:F_RDLCK(Lesesperre),F_WRLCK(Schreibsperre) oderF_UNLCK(Sperre aufheben)
-
Rückgabewerte
Gibt das Ergebnis des entsprechenden C-Aufrufs zurück.
Beispiele
Beispiel #1 Setzen und Löschen einer Sperre
<?php
$fd = dio_open('/dev/ttyS0', O_RDWR);
if (dio_fcntl($fd, F_SETLK, Array("type"=>F_WRLCK)) == -1) {
// Die Datei ist anscheinend schon anderweitig gesperrt
echo "Sperrung fehlgeschlagen, die Datei wird schon von jemand anderem gesperrt.";
} else {
echo "Sperrung erfolgreich durchgeführt";
}
dio_close($fd);
?>
Anmerkungen
Hinweis: Diese Funktion ist auf Windows-Plattformen nicht verfügbar.

