Function.dio-fcntl

Aus PHP-Wiki

Wechseln zu: Navigation, Suche
Hausratversicherung - Fahrradversicherung und UnfallversicherungStandregal 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.

Persönliche Werkzeuge