Ich baue gerade ein Carputer-Frontend und eine Funktion, die es braucht, um zu erkennen, wenn externe Medien wie USB / SD-Speichersticks oder iPods eingesteckt sind. Nach dem Einfügen scanne ich das Gerät nach Musik / Video / Bildern und füge es der Medienbibliothek hinzu. Alternativ muss ich wissen, wann diese Geräte entfernt werden, damit ich die hinzugefügten Elemente von den derzeit verfügbaren Medien entfernen kann.
Meine Frage ist: Was ist der beste Weg, um Festplatteneinfügungen / -entfernungen in einer Linux-Umgebung mit C ++ zu überwachen?
Ich könnte den Ordner / media überwachen, wenn Linux die Festplatten automatisch einbindet, aber ist dies der beste Weg, um die Aufgabe zu erledigen? Danke für jede Einsicht!
Sie können Kernel-Ereignisse von einem NetLink-Socket lesen. Es bietet Ereignisse zum Hinzufügen / Entfernen von Geräten, mount / umount.
- Netlink
Ein Daemon, der den Netlink hört Socket empfängt ein Datenpaket für Jedes Hotplug - Ereignis, das den dieselbe Information ein usermode-Helfer würde in der Umgebung erhalten Variablen.
Das Netlink-Paket enthält eine Menge von null terminierte Textzeilen. Der Erste Zeile des Netlink-Pakets kombiniert die Werte
$ACTION
und$DEVPATH
, getrennt durch ein @ (at-Zeichen). Jeder Zeile nach der ersten enthält aKEYWORD=VALUE
pair definiert einen Hotplug Ereignisvariable.[...]
AKTION
Die aktuelle Hotplug-Aktion: "Hinzufügen" zum Hinzufügen des Geräts, "Entfernen" zum Entfernen es. Der Kernel 2.6.22 kann auch "change", "online", "offline" und "move" Aktionen.
Wahrscheinlich möchten Sie die Aktionen mount
und umount
überwachen. Beachten Sie, dass das Ereignis weder den Geräteknoten noch den tatsächlichen Bereitstellungspunkt, nur den sysfs-Knoten des Geräts, enthält. Wenn die Verwaltungs- und Bereitstellungsverwaltung für Geräteknoten von einem externen Prozess (z. B. udev) gehandhabt wird, müssen Sie den Geräteknoten und einen Bereitstellungspunkt selbst anhand der Major- und Minor-Gerätenummern und /proc/mounts
ermitteln.
Wenn hald
auf Ihrem System ausgeführt wird, können Sie nach einem org.freedesktop.Hal.Manager.DeviceAdded
DBUS-Signal suchen.
Mounts sind ein bisschen Tricker, auf den Sie achten sollten, wenn Sie nicht die Kontrolle über den Mounter haben, müssen Sie möglicherweise /proc/mounts
dafür abfragen. Ich sehe keine Möglichkeit Benachrichtigungen von pmount oder gnome-volume-manager . KDE 4s Solid kann dafür eine Schnittstelle bereitstellen, aber ich habe mich nicht damit beschäftigt.