ddioctl-Eingangspunkt des Einheitentreibers
Zweck
Führt die in einem ioctl -oder Ioktlx -Subroutinenaufruf angeforderten speziellen E/A-Operationen aus.
Syntax
Beschreibung
Wenn ein Programm einen ioctl -oder Ioktlx -Subroutinenaufruf ausgibt, ruft der Kernel die Ddioktl -Routine des angegebenen Einheitentreibers auf. Die Routine Ddioktl ist für die Ausführung der angeforderten Funktionen verantwortlich. Darüber hinaus muss sie alle Steuerinformationen zurückgeben, die vom ursprünglichen Aufrufenden der Subroutine ioctl angegeben wurden. Der Parameter Bef enthält den Namen der auszuführenden Operation.
Die meisten ioctl-Operationen hängen von der jeweiligen Einheit ab. Alle ioctl-Routinen müssen jedoch auf den folgenden Befehl antworten:
| Element | Beschreibung |
|---|---|
| IOCINFO | Gibt eine devinfo -Struktur (definiert in der Datei /usr/include/sys/devinfo.h ) zurück, die die Einheit beschreibt. (Siehe die Beschreibung der Gerätedatei für eine bestimmte Einheit in der Anwendungsprogrammierschnittstelle.) Nur die ersten beiden Felder der Datenstruktur müssen zurückgegeben werden, wenn die übrigen Felder der Struktur nicht für die Einheit gelten. |
Der Parameter Einheitenflag gibt einen von mehreren Informationstypen an. Es kann Bedingungen geben, unter denen die Einheit geöffnet wurde. (Diese Bedingungen können anschließend durch den Aufruf der Subroutine Fcntl geändert werden.) Alternativ kann sie erkennen, auf welche zwei Arten der Eingangspunkt aufgerufen wurde:
- Durch das Dateisystem im Namen einer Anwendung, die die Anwendung verwendet
- Direkt von einer Kernelroutine mit dem Fp_ioctl -Kernel-Service
Daher haben Flags im Parameter devflag die folgenden Definitionen, die in der Datei /usr/include/sys/device.h definiert sind:
| Element | Beschreibung |
|---|---|
| DKERNEL | Eingangspunkt, der von der Kernelroutine mit dem Fp_ioctl -Service aufgerufen wird. |
| LESEVORGANG | Zum Lesen öffnen. |
| DWRITE | Zum Schreiben öffnen. |
| HINZUFÜGEN | Zum Anhängen öffnen. |
| DNDELAY@info:nach | Einheit im nicht blockierenden Modus geöffnet. |
Parameter
| Element | Beschreibung |
|---|---|
| Devno | Gibt die Haupt-und Nebeneinheitennummern an. |
| cmd | Der Parameter aus dem Aufruf der Subroutine ioctl , der die auszuführende Operation angibt. |
| arg | Der Parameter aus dem Aufruf der Subroutine ioctl , der ein zusätzliches Argument für die Operation Bef angibt |
| Einheitenflag | Gibt die Flags zum Öffnen der Einheit oder zur Dateisteuerung an. |
| Chan | Gibt die Kanalnummeran. |
| ext | Gibt Erweiterungsparameteran. |
Ausführungsumgebung
Die Routine Ddioktl wird nur in der Prozessumgebung ausgefü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 Ddioktl kann eine Fehlerbedingung für das Benutzermodus-Anwendungsprogramm angeben, indem ein Rückkehrcode ungleich null zurückgegeben wird. Dies führt dazu, dass ioctl Subroutine, um einen Wert zurückzugeben von-1 und stellt den Rückgabecode der Benutzermodusanwendung im Fehler Globale Variable. Der verwendete Fehlercode sollte einer der Werte sein, die in der/usr/include/sys/errno.h Datei.
Sofern zutreffend sollten die Rückgabewerte verwendet werden, die im Standard POSIX 1003.1 für die Subroutine ioctl definiert sind.