query_module - システムコールの説明 - Linux コマンド集 一覧表
名前
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
が指し示すバッファに格納されて返される。
呼び出し元は
buf
のサイズを
bufsize
に指定しなければならない。
得られる情報の正確な意味とフォーマットは、
which
でどの操作を指定するかによって異なる。
現在ロードされているモジュールを特定するために
name
を必要とする操作があれば、
カーネル固有であることを示す NULL を指定できる操作もある。
which
には以下の値を指定できる:
- 0
- 必ず成功を返す。 このシステムコールが利用可能かを調べるために使われる。
- QM_MODULES
- ロードされている全てのモジュールの名前を返す。 バッファには、NULL 終端された文字列が順に入る。 返されるバッファ ret にはモジュールの数が設定される。
- QM_DEPS
- 指定されたモジュールが使用している全モジュールの名前を返す。 バッファには、NULL 終端された文字列が順に入る。 返されるバッファ ret にはモジュールの数が設定される。
- QM_REFS
- 指定されたモジュールを使用している全モジュールの名前を返す。 これは QM_DEPS と逆の機能である。 バッファには、NULL 終端された文字列が順に入る。 返されるバッファ ret にはモジュールの数が設定される。
- QM_SYMBOLS
-
カーネルまたは指定されたモジュールがエクスポートしているシンボルと
値を返す。
バッファのデータは、
以下の構造体の配列に NULL 終端された文字列が続く形となる。
struct module_symbol { unsigned long value; unsigned long name; };
name の値は、 buf の先頭からの文字列までのオフセット文字数である。 ret にはシンボルの数が設定される。
- QM_INFO
-
指定されたモジュールに関する様々な情報を返す。
出力バッファのフォーマットは以下の形式となる:
struct module_info { unsigned long address; unsigned long size; unsigned long flags; };
address はそのモジュールが配置されているカーネル空間上のアドレス、 size はそのモジュールのバイト単位のサイズ、 flags は MOD_RUNNING , MOD_AUTOCLEAN 等のマスクであり、そのモジュールの現在の状態を示す (カーネルのソースファイル include/linux/module.h を参照)。 ret には module_info 構造体のサイズが設定される。
返り値
成功の場合 0 が返される。エラーの場合 -1 が返され、 errno に適切な値が設定される。
エラー
- EFAULT
- name , buf , ret の少なくとも一つが、プログラムがアクセスできる アドレス空間の外部であった。
- EINVAL
- which が不正である。あるいは name が NULL だが (NULL は "カーネル" を示す)、 which で指定された値との組み合わせは許可されていない。
- ENOENT
- name という名前のモジュールが存在しない。
- ENOSPC
- 与えられたバッファの大きさが小さすぎる。 ret には最小限必要なバッファのサイズが設定される。
準拠
query_module ()は Linux 固有である。
注意
このシステムコールが存在するのはカーネル 2.4 までの Linux だけである。 Linux 2.6 では削除された。 query_module ()で得られた情報のいくつかは、 /proc/modules , /proc/kallsyms , /sys/modules から取得できる。