fp_opendev Kernel-Service

Zweck

Öffnet eine Gerätedatei.

Syntax

#include <sys/types.h>
#include <sys/errno.h>
int fp_opendev (devno,flags,cname, ext, fpp)
dev_tdevno;
int  flags;
caddr_t cname;
ext_t  ext;
struct file** fpp;

Parameter

Element Beschreibung
Devno Gibt die Haupt-und Nebeneinheitennummer des zu öffnenden Einheitentreibers an.
flag Gibt einen der folgenden Werte an:
LESEVORGANG
Die Einheit wird nur zum Lesen geöffnet.
DWRITE
Die Einheit wird zum Schreiben geöffnet.
DNDELAY@info:nach
Die Einheit wird im nicht blockierenden Modus geöffnet.
cname Verweist auf einen Kanal, der eine Zeichenfolge oder einen Nullwert angibt.
ext Gibt ein Erweiterungsargument an, das für einige Einheitentreiber erforderlich ist. Inhalt, Form und Verwendung werden vom einzelnen Fahrer bestimmt.
FPP Gibt den zurückgegebenen Dateizeiger an. Dieser Parameter wird nach Referenz übergeben und vom Service fp_opendev als Dateizeiger für diese offene Instanz aktualisiert. Dieser Dateizeiger wird als Eingabe für andere Logical File System Services verwendet, um die offene Instanz anzugeben.

Beschreibung

Der Kernel oder die Kernelerweiterung ruft den fp_opendev -Kernelservice auf, um eine Einheit durch Angabe der Haupt-und Nebengerätenummer der Einheit zu öffnen. Der fp_opendev -Kernel-Service stellt die richtige Semantik zum Öffnen der Zeichen-oder Multiplexklasse von Einheitentreibern bereit.

Wenn der angegebene Einheitentreiber kein Multiplexing ist:

  • Für diese Einheit wurde ein Kern-I-Node gefunden oder erstellt.
  • Die Anzahl der I-Node-Referenzen wird um 1 erhöht.
  • Der Eingangspunkt des Einheitentreibers ddopen wird mit den Parametern Devno, Einheitenflagund Ext aufgerufen. Der nicht verwendete Parameter Chan im Aufruf der Routine ddopen wird auf 0 gesetzt.

Wenn es sich bei dem Einheitentreiber um einen Einheitentreiber mit Multiplexzeichen handelt (d. h., sein Eingangspunkt Ddmpx ist definiert), wird für diesen Kanal ein In-Core-I-Node erstellt. Die Ddmpx -Routine des Einheitentreibers wird auch mit dem Zeiger CName auf die Kanalidentifikationszeichenfolge aufgerufen, wenn sie ungleich null ist. Wenn der Zeiger CName null ist, wird die Ddmpx -Einheitentreiberroutine mit dem Zeiger auf eine Nullzeichenfolge aufgerufen.

Wenn der Einheitentreiber den Kanal zuordnen kann, gibt die Routine Ddmpx eine Kanal-ID zurück, die durch den Parameter Chan dargestellt wird. Wenn der Einheitentreiber keinen Kanal zuordnen kann, gibt der FPOpendev -Kernel-Service den Fehlercode ENXIO zurück. Bei erfolgreicher Ausführung wird die Anzahl der I-Node-Referenzen um 1 erhöht. Die ddopen -Routine des Einheitentreibers wird auch mit den Parametern Devno, Markierung, Chan (bereitgestellt durch die Ddmpx -Routine) und Ext aufgerufen.

Wenn der Rückgabewert der angegebenen ddopen -Routine des Einheitentreibers ungleich null ist, wird er als Rückkehrcode für den fp_opendev -Kernelservice zurückgegeben. Wenn der Rückkehrcode der ddopen -Routine des Einheitentreibers 0 ist, gibt der fp_opendev -Service den Dateizeiger zurück, der diesem Öffnen der Einheit entspricht.

Der Kernel-Service fp_opendev kann nur in der oberen Hälfte der Prozessumgebung oder des Einheitentreibers aufgerufen werden. Interrupt-Handler können sie nicht aufrufen. Es wird davon ausgegangen, dass sich alle Argumente für den fp_opendev -Kernelservice im Kernelbereich befinden.

Der vom fp_opendev -Kernel-Service zurückgegebene Dateizeiger (FPP) ist nur für die Verwendung mit einer Untergruppe der Services des logischen Dateisystems gültig. Diese neun Services können aufgerufen werden:

Andere Services geben einen EINVAL -Rückgabewert zurück, wenn sie aufgerufen werden.

Ausführungsumgebung

Der Kernel-Service fp_opendev kann nur über Prozessumgebung aufgerufen werden.

Rückgabewerte

Element Beschreibung
0 Zeigt eine erfolgreiche Operation an.

Das Feld *FPP zeigt auch auf eine offene Dateistruktur, die für die anderen Services des logischen Dateisystems gültig ist. Wenn ein Fehler auftritt, wird einer der folgenden Werte aus der Datei /usr/include/sys/errno.h zurückgegeben:

Element Beschreibung
EINVAL Gibt an, dass der übergeordnete Teil des Parameters Devno die maximal zulässige Anzahl überschreitet oder der Parameter Flags ungültig ist.
ENODEW Gibt an, dass die Einheit nicht vorhanden ist
EINTR Gibt an, dass das Signal während der Verarbeitung der Anforderung fp_opendev abgefangen wurde.
ENDATEI Gibt an, dass die Systemdateitabelle voll ist.
ENXIO Gibt an, dass die Einheit gemultiplext ist und den Kanal nicht zuordnen kann.

Der fp_opendev -Service gibt auch jeden Rückkehrcode ungleich null zurück, der von einer ddopen -Routine des Einheitentreibers zurückgegeben wurde.