11

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

在我开始做解析/proc/moduleslsmod输出之类的事情之前,实用函数是否已经存在于某个地方?类似的东西is_module_loaded(const char* name);

我很确定以前有人问过这个问题。但是,我认为我缺少搜索此内容的正确术语。

4

2 回答 2

18

没有这样的功能。事实上, lsmod ( lsmod.c) 的源代码中包含以下行,它应该会引导您找到您的解决方案:

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

还有一个已弃用query_module,但现在它似乎只存在于内核头文件中。

于 2012-10-19T16:58:29.110 回答
5

您可以使用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");
于 2012-10-19T17:02:16.007 回答