In diesem Artikel verwenden wir die Libudev-Bibliothek, um auf das Hidraw-Gerät zuzugreifen. Über die libudev-Bibliothek können wir die Hersteller-ID (VID), Produkt-ID (PID), Seriennummer und Gerätezeichenfolge des Geräts abfragen, ohne das Gerät zu öffnen. Darüber hinaus kann uns libudev den spezifischen Standortpfad des Geräteknotens im /dev-Verzeichnis mitteilen und so Anwendungen einen ausreichend robusten und vom Systemhersteller unabhängigen Zugriff auf Geräte ermöglichen. Um die libudev-Bibliothek zu verwenden, müssen Sie die Header-Datei libudev.h einbinden und beim Kompilieren -ludev hinzufügen, um dem Compiler mitzuteilen, dass er die udev-Bibliothek verknüpfen soll. Alle aktuell mit dem System verbundenen Hidraw-Geräte werden aufgelistet und ihr Geräteknotenpfad, Hersteller, Seriennummer und andere Informationen werden ausgegeben. Um diese Informationen zu erhalten, müssen Sie ein udev_enumerate-Objekt mit der Zeichenfolge „hidraw“ als Filterbedingung erstellen. libudev gibt alle udev_device-Objekte zurück, die der Filterzeichenfolge entsprechen. Die Schritte für dieses Beispiel sind wie folgt: 1. Initialisieren Sie die Bibliothek und erhalten Sie einen struct udev handle 2. Geräte aufzählen 3. Geben Sie den Knotennamen des gefundenen übereinstimmenden Geräts aus, suchen Sie den Startknoten des tatsächlichen USB-Geräts, drucken Sie die IDs und Seriennummern des USB-Geräts aus und dereferenzieren Sie schließlich das Geräteobjekt 4. Dereferenzierung von Enumerationsobjekten 5. Dereferenzieren Sie das udev-Objekt Der spezifische Code lautet wie folgt: #include <libudev.h> #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <unistd.h> int main (void) { Struktur udev *udev; Struktur udev_enumerate *enumerate; Struktur udev_list_entry *Geräte, *dev_list_entry; Struktur udev_device *dev; /* Das udev-Objekt erstellen */ udev = udev_new(); wenn (!udev) { printf("udev\n kann nicht erstellt werden"); Ausgang (1); } /* Erstellen Sie eine Liste der Geräte im Subsystem „hidraw“. */ aufzählen = udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(aufzählen, "hidraw"); udev_enumerate_scan_devices(aufzählen); Geräte = udev_enumerate_get_list_entry(aufzählen); /* Drucken Sie für jedes aufgezählte Element die Informationen aus. udev_list_entry_foreach ist ein Makro, das sich zu eine Schleife. Die Schleife wird für jedes Mitglied in Geräte, dev_list_entry auf einen Listeneintrag setzen welches den Pfad des Geräts in /sys enthält. */ udev_list_entry_foreach(dev_list_entry, Geräte) { const char *Pfad; /* Den Dateinamen des /sys-Eintrags für das Gerät abrufen und erstelle ein udev_device-Objekt (dev), das es repräsentiert */ Pfad = udev_list_entry_get_name(dev_list_entry); dev = udev_device_new_from_syspath(udev, Pfad); /* usb_device_get_devnode() gibt den Pfad zum Geräteknoten zurück selbst in /dev. */ printf("Geräteknotenpfad: %s\n", udev_device_get_devnode(dev)); /* Das von dev gezeigte Gerät enthält Informationen über das Hidraw-Gerät. Um Informationen über die USB-Gerät, holen Sie sich das übergeordnete Gerät mit dem Subsystem/Gerätetyp-Paar "usb"/"usb_device". Dies wird mehrere Ebenen im Baum sein, aber die Funktion findet Es.*/ dev = udev_device_get_parent_with_subsystem_devtype( Entwickler, "USB", "usb_gerät"); wenn (!dev) { printf("Übergeordnetes USB-Gerät konnte nicht gefunden werden."); Ausgang (1); } /* Von hier aus können wir get_sysattr_value() für jede Datei aufrufen im /sys-Eintrag des Geräts. Die in diese Funktionen (idProduct, idVendor, serial, etc.) entsprechen direkt auf die Dateien im Verzeichnis, das darstellt das USB-Gerät. Beachten Sie, dass USB-Zeichenfolgen Unicode, UCS2 codiert, aber die zurückgegebenen Zeichenfolgen udev_device_get_sysattr_value() sind UTF-8 kodiert. */ printf(" VID/PID: %s %s\n", udev_device_get_sysattr_value(dev,"idVendor"), udev_device_get_sysattr_value(dev, "Produkt-ID")); printf(" %s\n %s\n", udev_device_get_sysattr_value(dev,"Hersteller"), udev_device_get_sysattr_value(dev,"Produkt")); printf("Seriell: %s\n", udev_device_get_sysattr_value(dev, "serial")); udev_device_unref(dev); } /* Enumeratorobjekt freigeben */ udev_enumerate_unref(aufzählen); udev_unref(udev); gebe 0 zurück; } Kompilieren Sie das Programm: Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Optimierte Aufzeichnung der Verwendung von IN-Datenvolumen in Mysql
In diesem Artikel werden die Installations- und K...
Code kopieren Der Code lautet wie folgt: <vor&...
Originalartikel, bei Nachdruck bitte Autor und Qu...
Jeder, der meine Artikel in letzter Zeit gelesen ...
In erster Linie bin ich Webdesigner. Genauer gesag...
Inhaltsverzeichnis 1. Öffnen Sie das Projektverze...
Laden Sie das sichere Terminal MobaXterm_Personal...
Inhaltsverzeichnis Vorteil 1: Optimierung des Dif...
Inhaltsverzeichnis Frage: Es gibt 2 Token im Proj...
Vorwort Dieser Artikel fasst hauptsächlich einige...
Inhaltsverzeichnis Funktionale Komponenten So sch...
Schreiben Sie zuerst ein SQL Wählen Sie DISTINCT ...
Nehmen wir ein Benutzerverwaltungssystem an, bei ...
Inhaltsverzeichnis Kartenstaat Kartengetter Karte...
1. Überprüfen Sie, ob das vorhandene Nginx IPv6 u...