我正在编写一个C语言守护进程,需要两个内核模块的存在才能发挥作用。程序不直接使用这些(或任何其他)模块。它只需要这些模块存在即可。 因此,我希望以编程方式检查这些模块是否已经加载,以便在运行时向用户发出警告。
在开始执行解析/proc/modules
或lsmod
输出之类的操作之前,是否已经存在某个实用函数呢?
例如is_module_loaded(const char* name)
;
我相信这个问题以前已经被问过了。 但是,我认为我错过了正确的搜索术语。
我正在编写一个C语言守护进程,需要两个内核模块的存在才能发挥作用。程序不直接使用这些(或任何其他)模块。它只需要这些模块存在即可。 因此,我希望以编程方式检查这些模块是否已经加载,以便在运行时向用户发出警告。
在开始执行解析/proc/modules
或lsmod
输出之类的操作之前,是否已经存在某个实用函数呢?
例如is_module_loaded(const char* name)
;
我相信这个问题以前已经被问过了。 但是,我认为我错过了正确的搜索术语。
并没有这样的函数。事实上,lsmod (lsmod.c
) 的源代码中有以下行,应该会帮助你找到解决方案:
file = fopen("/proc/modules", "r");
现在也有一种过时的query_module
方法,但似乎只存在于内核头文件中。
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");