PHP Portal » PHP Handbuch » dio_fcntl

Werbung

dio_fcntl


(PHP 4 >= 4.2.0, PHP 5 <= 5.0.5)

dio_fcntlModifiziert einen Dateideskriptor

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, 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

PHP Code
1
2
3
4
5
6
7
8
$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.