Start · Sprachen · PHP · Referenz · dio_close

dio_close

Funktion

Schließt einen durch <code>dio_open()</code> geöffneten Dateideskriptor und gibt die zugehörigen Ressourcen frei.

seit PHP 4.2.0 Kategorie: io

Signatur

dio_close(resource $fd): void

Beschreibung

dio_close() schließt einen Datei-Deskriptor, der zuvor mit dio_open() geöffnet wurde. Die Funktion gehört zur Direct-I/O-Erweiterung (dio), die direkten Zugriff auf Datei-Deskriptoren auf Betriebssystemebene ermöglicht und damit die PHP-Standard-I/O-Abstraktion umgeht.

Nach dem Aufruf von dio_close() ist der übergebene Deskriptor ungültig und darf nicht mehr für weitere Lese-, Schreib- oder Steueroperationen verwendet werden. Alle gepufferten Daten werden dabei auf das darunterliegende Betriebssystem übergeben und der Dateideskriptor auf OS-Ebene geschlossen.

Die Funktion ist insbesondere dann nützlich, wenn niedrigstufige I/O-Operationen benötigt werden, z. B. für serielle Schnittstellen, UNIX-Gerätedateien oder wenn feingranulare Kontrolle über Dateideskriptoren erforderlich ist, die mit normalen PHP-Stream-Funktionen nicht erreichbar ist.

Hinweis: Die dio-Erweiterung ist eine PECL-Erweiterung und muss separat installiert bzw. kompiliert werden. Sie ist nicht standardmäßig in PHP enthalten.

Parameter

Name Typ Default Beschreibung
$fd Pflicht resource Der Dateideskriptor, der mit dio_open() geöffnet wurde und nun geschlossen werden soll.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Datei öffnen, schreiben und schließen

<?php
// Datei zum Schreiben öffnen (O_WRONLY | O_CREAT | O_TRUNC)
$fd = dio_open('/tmp/beispiel.txt', O_WRONLY | O_CREAT | O_TRUNC, 0644);

if ($fd === false) {
    die('Datei konnte nicht geöffnet werden.');
}

// Daten in die Datei schreiben
dio_write($fd, "Hallo, Direct I/O!\n");

// Dateideskriptor schließen
dio_close($fd);

echo "Datei erfolgreich geschrieben und geschlossen.\n";
Datei erfolgreich geschrieben und geschlossen.

Serielle Schnittstelle öffnen und schließen

<?php
// Serielle Schnittstelle öffnen (typisches Szenario für dio)
$fd = dio_open('/dev/ttyS0', O_RDWR | O_NOCTTY | O_NONBLOCK);

if ($fd === false) {
    die('Serielle Schnittstelle konnte nicht geöffnet werden.');
}

// Baudrate und andere Parameter setzen
dio_tcsetattr($fd, [
    'baud'    => 9600,
    'bits'    => 8,
    'stop'    => 1,
    'parity'  => 0,
]);

// Daten lesen (bis zu 128 Bytes)
$data = dio_read($fd, 128);
echo "Empfangene Daten: " . $data . "\n";

// Schnittstelle schließen
dio_close($fd);
echo "Schnittstelle geschlossen.\n";

// Wichtig · Fallstricke

PECL-Erweiterung: Die dio-Erweiterung ist nicht Teil der PHP-Standarddistribution. Sie muss über PECL installiert werden (pecl install dio) oder manuell kompiliert werden. Ohne diese Erweiterung ist dio_close() nicht verfügbar.

Ressourcen-Leaks vermeiden: Jeder mit dio_open() geöffnete Deskriptor sollte am Ende seiner Nutzung mit dio_close() explizit geschlossen werden, um Ressourcen-Leaks auf Betriebssystemebene zu verhindern. PHP schließt offene Deskriptoren zwar am Ende des Skripts automatisch, jedoch ist das explizite Schließen in langlebigen Prozessen oder Loops zwingend empfohlen.

Plattformabhängigkeit: Die dio-Erweiterung ist primär für UNIX/Linux-Systeme konzipiert. Die Verfügbarkeit und das Verhalten auf Windows-Systemen kann eingeschränkt oder abweichend sein.