dio_fcntl

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

dio_fcntl — Modifiziert einen Dateideskriptor

Beschreibung

function dio_fcntl(resource $fd, int $cmd, mixed $args = ?): mixed

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_SETLKW 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"

  • whence - 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 verfĂŒgbar.

add a note

User Contributed Notes

There are no user contributed notes for this page.