我正在编写一个C守护进程,它依赖于两个内核模块的存在才能完成它的工作。该程序不直接使用这些(或任何其他)模块。它只需要它们存在。 因此,我想以编程方式检查这些模块是否已经加载,以便在运行时警告用户。
在开始解析/proc/modules
或lsmod
输出之前,某个实用程序函数是否已经存在?
像is_module_loaded(const char* name)
;
我很确定以前曾经问过这个问题。 但是,我认为我错过了正确的搜索条件。
答案 0 :(得分:16)
没有这样的功能。实际上,lsmod(lsmod.c
)的源代码中包含以下行,它可以引导您找到解决方案:
file = fopen("/proc/modules", "r");
还有一个已弃用的query_module
,但它现在似乎只存在于内核头文件中。
答案 1 :(得分:4)
您可以使用popen
和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");