如何从用户空间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