query_module() - Unix,Linux 系统调用 - 技术教程
Tutorials Point


  Unix 初学者指南
  Unix Shell 编程
  高级 Unix
  Unix 有用参考
  Unix 有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  主页     参考     讨论论坛     关于 TP  

query_module() - Unix,Linux 系统调用


previous next AddThis Social Bookmark Button

广告

名称

query_module - 查询内核关于模块的各种信息

语法

#include <linux/module.h> 

int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret);

描述

query_module() 请求内核提供有关可加载模块的信息。返回的信息放置在 buf 指向的缓冲区中。调用者必须在 bufsize 中指定 buf 的大小。返回信息的精确性质和格式取决于 which 指定的操作。某些操作需要 name 来识别当前加载的模块,某些操作允许 name 为 NULL,表示内核本身。

以下值可以为 which 指定

标签描述
0 始终返回成功。用于探测系统调用的可用性。
QM_MODULES
 返回所有加载的模块的名称。返回的缓冲区由一系列以 null 结尾的字符串组成;ret 设置为模块的数量。
QM_DEPS
 返回所指示模块使用的所有模块的名称。返回的缓冲区由一系列以 null 结尾的字符串组成;ret 设置为模块的数量。
QM_REFS
 返回使用所指示模块的所有模块的名称。这是 QM_DEPS 的反向操作。返回的缓冲区由一系列以 null 结尾的字符串组成;ret 设置为模块的数量。
QM_SYMBOLS
 返回内核或所指示模块导出的符号和值。返回的缓冲区是一个如下所示的结构数组

struct module_symbol {
    unsigned long value;
    unsigned long name;
};

后面跟着以 null 结尾的字符串。name 的值为字符串相对于 buf 开头的字符偏移量;ret 设置为符号的数量。

QM_INFO
 返回有关所指示模块的杂项信息。输出缓冲区格式为

struct module_info {
    unsigned long address;
    unsigned long size;
    unsigned long flags;
};

其中 address 是模块驻留的内核地址,size 是模块以字节为单位的大小,flagsMOD_RUNNINGMOD_AUTOCLEAN 等的掩码,指示模块的当前状态(请参见内核源文件 include/linux/module.h)。ret 设置为 module_info 结构的大小。

返回值

成功时,返回零。发生错误时,返回 -1,并且 errno 被相应地设置。

错误

标签描述
EFAULT 至少 namebufret 之一在程序的可访问地址空间之外。
EINVAL 无效的 which;或者 name 为 NULL(表示“内核”),但对于指定的 which 值不允许这样做。
ENOENT 不存在名为 name 的模块。
ENOSPC 提供的缓冲区大小太小。ret 设置为所需的最小大小。

符合标准

query_module() 是 Linux 特定的。

注释

此系统调用仅在 Linux 内核 2.4 之前存在;它在 Linux 2.6 中被删除。可以通过 /proc/modules/proc/kallsyms/sys/modules 获取一些通过 query_module() 可用的信息。

参见



previous next Printer Friendly

广告


  

广告



广告
© . All rights reserved.