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_UNLCK
gesetzt. -
F_DUPFD
- Findet den kleinsten verfügbaren Dateideskriptor >=args
und gibt diesen zurück. -
F_SETFL
- Setzt die Flags des Dateideskriptors auf den inargs
angegebenen Wert. Die verfügbaren Flags sindO_APPEND
,O_NONBLOCK
undO_ASYNC
. UmO_ASYNC
setzen zu können, benötigen Sie die PCNTL-Extension.
-
-
args
-
Die
cmd
-OperationenF_SETLK
undF_SETLLW
erwarten 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 sichstart
bezieht, dabei stehtSEEK_SET
für den Dateianfang,SEEK_END
für das Dateiende undSEEK_CUR
fü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.