C IOCTL -Funktionsnutzung

C IOCTL -Funktionsnutzung
Die einfachen Dateien eines Linux-basierten Systems können problemlos mit einfachen Eingabe- und Ausgabeoperationen gelesen oder geschrieben werden. Es gibt jedoch auch einige andere komplexe Arten von Dateien, auf die einfache Eingabe- und Ausgabefunktionen nicht zugegriffen werden können. Wir verwenden die Funktion „IOCTL“ der C -Programmiersprache für alle solchen Dateien. Es steht für „Eingabe/ Ausgangskontrolle.”

In diesem Artikel werden wir versuchen, den Zweck der „IOCTL“ -Funktion der C-Programmiersprache „IOCTL“ zu verstehen, indem Sie sich die Syntax ansehen. Dann werden wir ein wenig über den Dateityp sprechen, für den diese Funktion verwendet wird, und wir werden Ihnen auch den Ort weitergeben, an dem sich solche Dateien normalerweise befinden. Dann werden wir ein Beispiel demonstrieren, das die Funktion „IOCTL“ der C -Programmiersprache verwendet. Schließlich werden wir einige mit dieser spezielle Funktion verbundene Fehler diskutieren.

Der Zweck der IOCTL -Funktion in C:

Abgesehen von den regulären Dateien eines Systems gibt es einige spezielle Zweckdateien wie die Gerätedateien. Die Gerätedateien sind diejenigen, die verwendet werden, um mit den verschiedenen Gerätetreibern eines Systems zu interagieren. Sie können jedoch nicht mit Hilfe regelmäßiger Systemaufrufe auf diese Gerätedateien zugreifen. Hier kommt die „IOCTL“ -Funktion ins Spiel. Diese Funktion hilft beim Zugriff auf diese Dateien sehr bequem. Die „IOCTL“ -Funktion der C -Programmiersprache liegt im „IOCTL.H ”Header -Datei.

Die allgemeine Syntax dieser Funktion ist unten angehängt:

#define "Name von IOCTL" _IO (Num1, Num2, Argumentyp)

Hier kann „Name der IOCTL“ durch jeden aussagekräftigen Namen ersetzt werden, den Sie für Ihre bestimmte Funktion wünschen. Dann kann "_io" so übrig bleiben, wie es für eine "IOCTL" -Funktion ohne Parameter ist. Sie können es jedoch auch durch "_iow", "_ior" und "_iowr" für eine "IOCTL" -Funktion mit Schreiben, Lesen und Schreiben und Lesen beider Funktionen ersetzen. "Num1" bezieht sich auf die eindeutige Nummer, die unserem "IOCTL" -Anruf zugewiesen ist zu tun mit.

Wo befinden sich die Gerätedateien auf einem Linux -System??

Die Gerätedateien befinden sich normalerweise im Verzeichnis „/Dev“ eines Linux-basierten Systems. Für den Zugriff auf alle dieser Dateien mit Hilfe der Funktion „IOCTL“ müssen Sie daher zum Verzeichnis „/Dev“ Ihres Systems navigieren.

Verwendung der IOCTL -Funktion in C:

Um Ihnen die Verwendung der IOCTL -Funktion in der C -Programmiersprache ausführlich zu erklären, haben wir ein einfaches C -Programm verwendet, das in den folgenden Bildern gezeigt wird. Wir beabsichtigen, eine bestimmte Gerätedatei aus unserem System zu öffnen und in diesem Programm einen zufälligen Wert darauf zu schreiben. Danach möchten wir auch einen Wert aus derselben Datei lesen. Sie müssen sich den Code für dieses Beispiel ansehen, um ihn klarer zu verstehen.

Zunächst haben wir eine lange Liste von Bibliotheken oder Header -Dateien aufgenommen, deren Funktionen in diesem C -Programm verwendet werden. Dann haben wir die Funktionen "Lesen" und "Schreiben" definiert, indem wir das Schlüsselwort "Definieren" zum Lesen und Schreiben der Gerätedateien unseres Systems verwenden. Danach haben wir in unserer Funktion „main ()“ eine Ganzzahlvariable mit dem Namen „FileDescriptor“ definiert.Dieser Dateideskriptor wird verwendet, um zu überprüfen, ob unsere Gerätedatei effektiv geöffnet wurde oder nicht. Dann haben wir zwei weitere Variablen des int32_t -Typs mit dem Namen "Val" und "Num" definiert.”Diese Variablen nehmen zur Laufzeit die Eingabe vom Benutzer und zeigen die entsprechende Ausgabe an.

Danach haben wir eine Nachricht gedruckt, um zu vermitteln, dass unser Programm versucht, die Gerätedatei zu öffnen. Mit der Funktion „Open“ haben wir dann versucht, die gewünschte Gerätedatei zu öffnen, indem wir ihren richtigen Pfad bereitstellen, i.e., Das Verzeichnis "/dev" gefolgt vom Namen der gewünschten Gerätedatei. Danach wollten wir überprüfen, ob die Datei erfolgreich geöffnet wurde oder nicht. Dazu müssen wir den Wert der Variablen „Anmeldeskriptor“ validieren. Angenommen, dieser Wert wird kleiner als "0" sein. In diesem Fall wird eine Fehlermeldung auf dem Terminal gedruckt, in dem angegeben ist.

Andernfalls wird eine Nachricht auf dem Terminal gedruckt, wenn die Gerätedatei erfolgreich geöffnet wird. Anschließend wird die angegebene Benutzereingabe in der Variablen „Num“ gespeichert. Danach wird eine Nachricht auf dem Terminal gedruckt, um zu vermitteln, dass die bestandene Nummer in die angegebene Gerätedatei geschrieben wurde, gefolgt von der Funktion „IOCTL“, die diese Aktion ausführt. Dann möchten wir den Wert aus derselben Datei lesen, für die wir eine Nachricht auf dem Terminal gedruckt haben, und verwenden dann erneut die Funktion „IOCTL“.

Danach haben wir den Wert der Val -Variablen auf dem Terminal gedruckt, nämlich die von der angegebenen Gerätedatei gelesene Wert. Anschließend haben wir eine Nachricht am Terminal veröffentlicht, um das Schließen der Gerätedatei zu vermitteln. Auf diese Meldung folgt die Funktion „Schließen“, mit der der Wert der Variablen „Anmeldeskriptor“ geändert wird, damit die in Diskussion diskutierte Gerätedatei sicher geschlossen werden kann. Schließlich haben wir die Anweisung "Return 0" als letzte Aussage unseres C -Programms verwendet.

Jetzt ist es Zeit, dieses C -Programm zu kompilieren, um Fehler zu sehen. Dafür haben wir den angebotenen Befehl verwendet:

$ gcc ioctl.c -o ioctl

Um diesen kompilierten C -Code auszuführen, haben wir den unten angegebenen Befehl verwendet:

$ ./ioctl

Nachdem wir dieses C -Skript ausgeführt hatten, wurden wir gebeten, den Wert einzugeben, den wir an die Gerätedatei senden wollten. Wir haben die Nummer "3" eingegeben, wie im folgenden Bild gezeigt:

Sobald wir diesen Wert am Terminal geliefert haben, wurde er sofort in unsere Gerätedatei geschrieben. Ein neuer Wert wurde aus dieser Datei gelesen und auf dem Terminal angezeigt, wie im Bild unten gezeigt. Sie können sich auch die auf dem Terminal gedruckten aufeinanderfolgenden Nachrichten als Ausgabe dieses C -Programms ansehen.

Häufige Fehler, die mit der IOCTL -Funktion in C verbunden sind:

Die drei häufigsten Fehler, die mit der Funktion „IOCTL“ verbunden sind, sind wie folgt:

  • Ebadf: Der Dateideskriptor ist ungültig.
  • Efault: Verweigerter Zugriff auf ungültige Speicher.
  • Einval: Anfrage ist ungültig.

Abschluss:

Dieser Artikel drehte sich darum, die „IOCTL“ -Funktion der C -Programmiersprache zu diskutieren. Wir haben den detaillierten Zweck dieser Funktion und den Dateityp angegeben, mit dem sich diese Funktion im Allgemeinen befasst. Dann haben wir ein gründliches Beispiel geteilt, um die Verwendung dieser Funktion zu demonstrieren, gefolgt von einigen mit dieser Funktion zugeordneten Fehler. Hoffentlich verstehen Sie nach diesem Leitfaden die Funktionsweise der „IOCTL“ -Funktion der C -Programmiersprache gut.