dio_close
dio_open
Direct IO Funktionen
PHP Manual

# dio_fcntl

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

dio_fcntl — Modifiziert 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.

> Hinweis: Diese Funktion ist auf Windows-Plattformen nicht implementiert.

### 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);
?>`

dio_close
dio_open
Direct IO Funktionen
PHP Manual