2012-10-19 64 views
8

我正在編寫一個C守護進程,這取決於是否存在兩個內核模塊以完成其工作。該程序不直接使用這些(或任何其他)模塊。它只需要它們存在。 因此,我想以編程方式檢查這些模塊是否已經加載,以便在運行時警告用戶。以編程方式檢查在運行時是否存在linux內核模塊

在我開始執行諸如解析/proc/moduleslsmod輸出之類的事情之前,某個地方是否存在實用函數? 類似於is_module_loaded(const char* name);

我非常確定這已被問過。 但是,我想我錯過了正確的術語來搜索這個。

回答

3

您可以使用popenlsmod | grep招:

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

看起來很骯髒,但它的工作原理,我從來沒有想過這樣簡單的解決方案。乾杯 – dgraziotin

+1

假設lsmod打開「/ proc/modules」,並且grep涉及另一個進程併爲管道打開附加文件,使用「grep module_name/proc/modules」會更有效,並檢查是否有任何來自而不是?即使lsmod不可用,這也可以工作。 – Jeremy

12

沒有這樣的功能。事實上,lsmod的源代碼(lsmod.c)中有以下行應該引領你的解決方案:

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

還有一個過時query_module但它似乎只在內核頭文件中存在的這些天。

+0

我的問題是足夠的曖昧都要求這樣的功能,以及如何編寫功能的存在。因此,我會加快答覆並接受@tozka答案,因爲它適用於我。感謝您的解釋! – dgraziotin

相關問題