如何从用户空间的C代码获取Linux内核模块列表?

3

我希望通过C代码获取内核模块列表,并在之后打印它们的版本号。

从脚本中实现很简单:

cat /proc/modules
lsmod

之后,运行所有找到的驱动程序:

modinfo driver_name

从C代码中,我可以打开/proc/modules并分析其中的数据,但是是否有更简单的方法读取这个驱动程序列表?


你的问题涉及编程,因此建议将其迁移到[SO] — 请不要在那里重新发布。 - slhck
你可能会在Linux内核的module.cmodule.h文件中找到一些有用的API函数。 - Breakthrough
在Linux上,读取/proc/sys在许多情况下是官方的方法。 - user1686
1个回答

3

从C代码中,我可以打开/proc/modules并分析其中的数据,但是否有更简单的方法来读取这个驱动程序列表?

这取决于您对简单的定义。在Unix领域,一切都是文件的概念确实使某些事情变得更简单,因为:

int fd = open("/proc/modules" | O_RDONLY);

while ( read(fd, &buffer, BUFFER_LIMIT) )
{
    // parse buffer
}

close(fd);

涉及的函数调用与打开和读取任何文件相同
另一种机制是内核在您的进程地址空间中分配一些指向该信息的内存(您可以使用自定义系统调用来完成此操作),但实际上并不需要-正如您所看到的,这种方法不仅适用于C,而且适用于脚本。

2
使用fopen()/fgets()可能会更容易,因为/proc/modules是基于行的。 - nos
@nos 绝对同意。随意更改代码示例 :) - user257111

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接