PHP Dokumentation: Function dio-fcntl
12. Januar 2010 von werner
dio_fcntl
(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5)
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 – ähnlich F_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" 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 aufWindows-Plattformen nicht implementiert.