2012-10-19 49 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

相关问题