Function.dio-fcntl
Aus PHP-Wiki
Hausratversicherung - Fahrradversicherung und Unfallversicherung, Standregal Prinzessin Karolin von Pinolino . kfz-versicherung
dio_fcntl — Modifiziert einen Dateideskriptor
Inhaltsverzeichnis |
Beschreibung
mixed dio_fcntl ( resource $fd , int $cmd [,mixed $args ] )
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 - ähnlich F_SETLK, hier wird aber in dem Fall das 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üc wenn jemand anders bereits eine Sperre hält. Existiert keine andere Sperre wird das Element "type" auf F_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 in args angegebenen Wert. Die verfügbaren Flags sind O_APPEND, O_NONBLOCK und O_ASYNC. Um O_ASYNC setzen zu können benötigen sie die PCNTL Extension.
- args
- Die cmd Operationen F_SETLK und F_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" "wenth" - Die Position auf die sich start bezieht, dabei steht SEEK_SET für den Dateianfang, SEEK_END für das Dateiende und SEEK_CUR für die aktuelle Schreib-/Leseposition. "type" - Art der Sperre: F_RDLCK (Lesesperre), F_WRLCK (Schreibsperre) oder F_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 implementiert.