以编程方式检查运行时是否存在Linux内核模块

我正在编写一个C守护进程,它依赖于两个内核模块的存在才能完成它的工作。 该程序不直接使用这些(或任何其他)模块。 它只需要它们存在。 因此,我想以编程方式检查这些模块是否已加载,以便在运行时警告用户。

在我开始执行诸如解析/proc/moduleslsmod输出之类的操作之前,某个实用程序函数是否已经存在? 类似于is_module_loaded(const char* name) ;

我很确定以前曾经问过这件事。 但是,我认为我错过了正确的搜索条件。

你可以使用popenlsmod | grep lsmod | 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"); 

没有这样的function。 实际上,lsmod( lsmod.c )的源代码中包含以下行,它可以引导您找到解决方案:

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

还有一个不推荐使用的query_module但它现在似乎只存在于内核头文件中。