Die beste Methode, Festplatten-Mounts unter Linux mit C ++ zu überwachen?

8

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!

    
jamesmillerio 29.01.2009, 18:52
quelle

2 Antworten

7

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 a    KEYWORD=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.

    
Alex B 29.01.2009, 18:55
quelle
4

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.

    
ephemient 29.01.2009 21:13
quelle

Tags und Links