系统相关
首页 > 系统相关> > 如何从用户空间C代码获取Linux内核模块列表?

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

作者:互联网

我想通过C代码获取内核模块的列表,并在以后打印它们的版本.

在脚本中,这很简单:

cat /proc/modules
lsmod

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

modinfo driver_name

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

解决方法:

From C code, I can open /proc/modules, and analyze the data there, but is there a simpler way of reading this drivers list?

取决于您对简单的定义.在Unix领域中,一切都作为文件的概念确实使某些方面变得更简单,因为:

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

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

close(fd);

涉及与打开和读取任何文件相同的函数调用集.

另一种机制是内核在进程的地址空间中分配一些内存来指向该信息(您可能可以通过自定义系统调用来做到这一点),但实际上并不需要-如您所见,这种方式有效不仅使用C,而且使用脚本也很好.

标签:linux-kernel,c-3,linux
来源: https://codeday.me/bug/20191201/2082386.html