Linux mount / unmount Signal C/C++

kle-ben

Erfahrenes Mitglied
Hi,

ich würde gerne irgendwie benachrichtigt werden wenn ein device gemountet oder unmounted wird.
Ist das irgendwie möglich? Oder muss ich dazu in regelmäßigen Abständen /proc/mounts parse?

Vielleicht hat jemand von euch eine elegantere Idee.

Viele Grüße
Ben
 
Hi,

ich habe mir nun die Netlink-Sockets mal genauer angeschaut aber so richtig schlau wird man daraus nicht.
Heist das das ich ein eigenes Kernelmodul schreiben muss das die Information verschickt o der kann
das Netlink schon. Ich hab keine Informationen darueber gefunden was ich dann fuer eine Nachricht verschicken
muss um dann solche Nachrichten zugesendet zu bekommen.
 
Hi,

ich habe mir nun die Netlink-Sockets mal genauer angeschaut aber so richtig schlau wird man daraus nicht.
Heist das das ich ein eigenes Kernelmodul schreiben muss das die Information verschickt o der kann
das Netlink schon. Ich hab keine Informationen darueber gefunden was ich dann fuer eine Nachricht verschicken
muss um dann solche Nachrichten zugesendet zu bekommen.
Nein, ein Kernelmodul musst du dafür nicht schreiben. Du musst dich nur zur Gruppe NETLINK_KOBJECT_UEVENT verbinden (3. Parameter bei socket) und bekommst die Nachrichten dann über das Socket zugestellt. Wie man die Nachrichten ausliest, ist in der verlinkten Manpage unter „Examples“ beschrieben.

\edit: Wie es scheint, versenden aktuelle Linux-Kernel keine Mount-Events mehr über Netlink. Sorry für die Falschinformation.

Grüße,
Matthias
 
Zuletzt bearbeitet:
Hm okay, dann muss ich wohl doch die /proc/mounts parsen.

Ich hab das grade mal versucht nur lässt sich die Datei irgendwie nicht öffnen.
Nur wenn ich mein Programm mit root Rechten starte.

Auf der Konsole kann ich die Datei einfach mit cat ausgeben ohne root Rechte.
mounts ist ein link mit den Rechten 777. Er verweist auf self/mounts.
Und self ist wieder ein Link mit den Rechten 777. Er verweist auf {nummer}
wobei {nummer} eine Ziffernfolge ist die sich bei jedem ls verändert. (sieht nach einem Zähler aus)
{nummer} hat auf jedenfall immer die Rechte 555
Die Datei Mounts in self hat die Rechte 444. Ich hab also egal wer auch immer ich bin das
Recht die Datei zu lesen. Woran könnte das sonst noch liegen das ich die
Datei nicht bzw nur mit root Rechten öffnen kann.

Vielen Dank!


Gruß Ben
 
Hm okay, dann muss ich wohl doch die /proc/mounts parsen.
Das müsstest du sowieso, wenn du dein Programm beim Start erst mal auf den aktuellen Stand bringen willst. Aber ist ja auch kein riesiger Aufwand, da es dafür sowieso fertige Funktionen gibt.

Ich hab das grade mal versucht nur lässt sich die Datei irgendwie nicht öffnen.
Nur wenn ich mein Programm mit root Rechten starte.

Auf der Konsole kann ich die Datei einfach mit cat ausgeben ohne root Rechte.
mounts ist ein link mit den Rechten 777. Er verweist auf self/mounts.
Und self ist wieder ein Link mit den Rechten 777. Er verweist auf {nummer}
wobei {nummer} eine Ziffernfolge ist die sich bei jedem ls verändert. (sieht nach einem Zähler aus)
{nummer} hat auf jedenfall immer die Rechte 555
Die Datei Mounts in self hat die Rechte 444. Ich hab also egal wer auch immer ich bin das
Recht die Datei zu lesen. Woran könnte das sonst noch liegen das ich die
Datei nicht bzw nur mit root Rechten öffnen kann.
Da wäre es jetzt interessant zu wissen, wie deine konkrete Implementierung aussieht. Die Nummer, die du beschreibst, ist übrigens die Prozess-ID. Der Verweis auf /proc/self ist notwending, da jeder Prozess einen eigenen Mount-Namensraum besitzt.

Grüße,
Matthias
 
Das müsstest du sowieso, wenn du dein Programm beim Start erst mal auf den aktuellen Stand bringen willst. Aber ist ja auch kein riesiger Aufwand, da es dafür sowieso fertige Funktionen gibt.

Danke für die Referenz das macht es um einiges einfacher. Das andere Problem hat sich bereits gelöst. Als ich mir meinen Code nochmal angeschaut hab hab ich gesehn das ich das i vor dem ifstream vergessen hatte. Beim fstream werden aber noch Schreibrechte mitgesetzt und das geht bei einer Datei mit den Rechten 444 schlecht.

Gruß Ben
 

Neue Beiträge

Zurück