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
1. Herunterladen Laden Sie mysql-5.7.19-linux-gli...
Heute werde ich Ihnen einen Laufschrifteffekt zei...
Dies ist das Installationstutorial von mysql5.7.1...
Inhaltsverzeichnis 1. Hintergrund des Problems: 2...
Inhaltsverzeichnis 1. Erstellen Sie ein Redis-Doc...
Inhaltsverzeichnis Bei der Entwicklung kann eine ...
Beschreibung: Stellen Sie einen Timer ein, um den ...
Inhaltsverzeichnis Was ist ein Slot Grundlegendes...
Inhaltsverzeichnis Vorwort: 1. Verstehen Sie Lock...
Installation der MySQL-Dekomprimierungsversion un...
Vorwort: In einigen früheren Artikeln haben wir h...
Vorteile eines programmatischen Ansatzes 1. Globa...
1. Finden Sie heraus, ob MySQL zuvor installiert ...
Inhaltsverzeichnis 1. Prozesskontrolle 2. Sequent...
Inhaltsverzeichnis JS Drei Berge Synchron Asynchr...