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

时间:2012-03-04 16:18:33

标签: linux linux-kernel c

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

从脚本中这很简单:

cat /proc/modules
lsmod

以及稍后,运行所有找到的驱动程序:

modinfo driver_name

从C代码开始,我可以打开/proc/modules并分析那里的数据,但有没有更简单的方法来阅读这个驱动程序列表?

1 个答案:

答案 0 :(得分:3)

  

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

取决于您对简单的定义。 Unix中的概念是一切都是的文件在一个方面使一切变得更简单,因为:

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

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

close(fd);

涉及与打开和读取任何文件相同的一组函数调用。

替代机制是内核在进程的地址空间中分配一些指向该信息的内存(你可以通过自定义系统调用来实现这一点),但实际上没有必要 - 如你所见,这种方式不仅适用于C,而且还适用于脚本。

相关问题