2012-10-19 2 views
8

Ich schreibe einen C-Daemon, der von der Existenz von zwei Kernel-Modulen abhängt, um seine Aufgabe zu erledigen. Das Programm verwendet diese (oder andere) Module nicht direkt. Es braucht sie nur, um zu existieren. Daher möchte ich programmgesteuert prüfen, ob diese Module bereits geladen sind oder nicht, um den Benutzer zur Laufzeit zu warnen.Programmgesteuert prüfen, ob ein Linux-Kernel-Modul zur Laufzeit existiert oder nicht

Bevor ich mit der Ausgabe von /proc/modules oder lsmod Ausgaben beginne, gibt es irgendwo schon eine Dienstprogrammfunktion? Etwas wie is_module_loaded(const char* name);

Ich bin mir ziemlich sicher, dass dies schon einmal gefragt wurde. Allerdings fehlen mir die richtigen Begriffe, um danach zu suchen.

Antwort

3

können Sie popen und lsmod | grep Trick:

FILE *fd = popen("lsmod | grep module_name", "r"); 

    char buf[16]; 
    if (fread (buf, 1, sizeof (buf), fd) > 0) // if there is some result the module must be loaded 
    printf ("module is loaded\n"); 
    else 
    printf ("module is not loaded\n"); 
+0

Sieht sehr dreckig aus, aber es funktioniert und ich habe nie über so eine einfache Lösung nachgedacht. Prost – dgraziotin

+1

Vorausgesetzt, dass lsmod "/ proc/modules" öffnet, und dass grep einen anderen Prozess beinhaltet und zusätzliche Datei für die Pipe geöffnet wird, wäre es effizienter, "grep module_name/proc/modules" zu verwenden und zu überprüfen, ob eine Ausgabe vorliegt das stattdessen? Dies würde auch funktionieren, selbst wenn lsmod nicht verfügbar wäre. – Jeremy

12

Es gibt keine solche Funktion. In der Tat hat der Quellcode von lsmod (lsmod.c) die folgende Zeile darin, die Sie zu Ihrer Lösung führen sollte:

file = fopen("/proc/modules", "r"); 

Es gibt auch eine veraltete query_module aber es scheint nur in diesen Tagen in die Kernel-Header vorhanden sind.

+0

Meine Frage mehrdeutig genug war für die Existenz einer solchen Funktion zu stellen und wie die Funktionalität zu codieren. Deshalb werde ich Ihre Antwort verbessern und @tozka antworten, weil es für mich funktioniert. Danke für die Erklärungen! – dgraziotin

Verwandte Themen