ddclose Einstiegspunkt für Einheitentreiber
Zweck
Schließt eine zuvor geöffnete Einheiteninstanz.
Syntax
Parameter
| Element | Beschreibung |
|---|---|
| Devno | Gibt die Major-und Minor-Einheitennummern der Einheiteninstanz an, die geschlossen wird. |
| Chan | Gibt die Kanalnummeran. |
Beschreibung
Der Eingangspunkt ddclose wird aufgerufen, wenn eine zuvor geöffnete Einheiteninstanz von der Subroutine Schließen oder vom fp_schließen Kernel-Service geschlossen wird. Der Kernel ruft die Routine unter verschiedenen Umständen für Nicht-Multiplexer-und Multiplex-Einheitentreiber auf.
Bei Einheitentreibern ohne Multiplexing ruft der Kernel die Routine ddclose auf, wenn der letzte Prozess, der die Einheiteninstanz geöffnet hat, sie schließt. Dadurch wird die g-Knoten -Referenzanzahl auf 0 verringert und die Zuordnung des g-Knotens aufgehoben.
Bei Multiplexeinheitentreibern wird die Routine ddclose für jedes Schließen aufgerufen, das einem expliziten Öffnen zugeordnet ist. Mit anderen Worten: Die ddclose -Routine des Einheitentreibers wird einmal für jedes Mal aufgerufen, wenn seine ddopen -Routine für den Kanal aufgerufen wurde.
In einigen Fällen sollten Datenpuffer auf die Einheit geschrieben werden, bevor sie von der ddclose -Routine zurückgegeben werden. Dies sind Puffer, die Daten enthalten, die auf die Einheit geschrieben werden sollen, die vom Einheitentreiber in die Warteschlange gestellt, aber noch nicht geschrieben wurden.
Einheitentreiber ohne Multiplexing sollten die zugeordnete Einheit auf einen inaktiven Status zurücksetzen und den Einheitenstatus des Einheitentreibers in 'Geschlossen' ändern. Dazu kann es gehören, den fp_schließen -Kernel-Service aufzurufen, um eine nahe an einem zugeordneten offenen Einheitenhandler für das Gerät auszugeben. Wenn Sie die Einheit in einen inaktiven Status zurückversetzen, wird verhindert, dass die Einheit weitere Unterbrechungs-oder DMA-Anforderungen (Direct Memory Access) generiert. DMA-Kanäle und Interruptebenen, die dieser Einheit zugeordnet sind, sollten freigegeben werden, bis die Einheit erneut geöffnet wird, um kritische Systemressourcen freizugeben, die diese Einheit verwendet.
Multiplex-Einheitentreiber sollten dieselbe Einheitenstilllegung bereitstellen, aber nicht in der ddclose -Routine. Die Rückgabe der Einheit in den inaktiven Status und die Freigabe ihrer Ressourcen sollte verzögert werden, bis die Routine Ddmpx aufgerufen wird, um die Zuordnung des letzten Kanals, der auf der Einheit zugeordnet ist, aufzuheben.
In allen Fällen gilt die Einheiteninstanz als geschlossen, sobald die Routine ddclose an den Aufrufenden zurückgegeben wurde, auch wenn ein Rückkehrcode ungleich null zurückgegeben wird.
Ausführungsumgebung
Die Routine ddclose wird nur in Prozessumgebungausgeführt. Er sollte die erforderliche Serialisierung seiner Datenstrukturen bereitstellen, indem er die Sperrenkernel-Services in Verbindung mit einem im Treiber definierten privaten Sperrwort verwendet.
Rückgabewerte
Der Eingangspunkt ddclose kann eine Fehlerbedingung für das Benutzermodus-Anwendungsprogramm angeben, indem ein Rückkehrcode ungleich null zurückgegeben wird. Dies bewirkt, dass der Aufruf der Subroutine einen Wert von zurückgibt-1 . Außerdem wird der Rückkehrcode für die Anwendung im Benutzermodus in der globalen Variablen Fehlernummer verfügbar gemacht. Der verwendete Rückgabecode sollte einer der Werte sein, die in der/usr/include/sys/errno.h Datei.
Die Einheit wird immer als geschlossen betrachtet, auch wenn ein Rückkehrcode ungleich null zurückgegeben wird.
Gegebenenfalls sollten die Rückgabewerte verwendet werden, die im Standard POSIX 1003.1 für die Subroutine close definiert sind.