Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
query_module - モジュールに関連する各種の情報をカーネルに問い合わせる
書式
#include <linux/module.h> int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret); 注意: このシステムコールの宣言は glibc のヘッダーでは提供されていない。「注意」を参照。
説明
注意: このシステムコールが存在するのは、カーネル 2.6 より前の Linux だけである。 query_module() は、ローダーブルモジュールに関する情報をカーネルに問い合わせる。 情報は buf が指し示すバッファーに格納されて返される。 呼び出し元は buf のサイズを bufsize に指定 しなければならない。 得られる情報の正確な意味とフォーマットは、 which でどの操作を指定する かによって異なる。 現在ロードされているモジュールを特定するために name を必要とする操作が あれば、 カーネル固有であることを示す NULL を指定できる操作もある。 which には以下の値を指定できる: 0 カーネルが query_module() をサポートしている場合、成功を返す。 このシステムコール が利用可能かを調べるために使われる。 QM_MODULES ロードされている全てのモジュールの名前を返す。 バッファーには、ヌル終端された文字列 が順に入る。 返されるバッファー ret にはモジュールの数が設定される。 QM_DEPS 指定されたモジュールが使用している全モジュールの名前を返す。 バッファーには、ヌル終 端された文字列が順に入る。 返されるバッファー ret にはモジュールの数が設定される。 QM_REFS 指定されたモジュールを使用している全モジュールの名前を返す。 これは QM_DEPS と逆の 機能である。 バッファーには、ヌル終端された文字列が順に入る。 返されるバッファー ret にはモジュールの数が設定される。 QM_SYMBOLS カーネルまたは指定されたモジュールがエクスポートしているシンボルと 値を返す。 バッ ファーのデータは、 以下の構造体の配列にヌル終端された文字列が続く形となる。 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 等のマスクであ り、そのモジュールの現在の状態を示す (Linux カーネルのソースファイル include/linux/module.h を参照)。 ret には module_info 構造体のサイズが設定される。
返り値
成功の場合 0 が返される。エラーの場合 -1 が返され、 errno に適切な値が設定される。
エラー
EFAULT name, buf, ret の少なくとも一つが、プログラムがアクセスできる アドレス空間の外部で あった。 EINVAL which が不正である。あるいは name が NULL だが (NULL は "カーネル" を示す)、 which で指定された値との組み合わせは許可されていない。 ENOENT name という名前のモジュールが存在しない。 ENOSPC 与えられたバッファーの大きさが小さすぎる。 ret には最小限必要なバッファーのサイズが 設定される。 ENOSYS query_module() はこのバージョンのカーネルではサポートされていない (例えば、カーネル のバージョンが 2.6 以降)。
バージョン
このシステムコールが存在するのはカーネル 2.4 までの Linux だけである。 Linux 2.6 では削除 された。
準拠
query_module() は Linux 固有である。
注意
以前 query_module() で得られた情報のいくつかは、 /proc/modules, /proc/kallsyms および /sys/module ディレクトリ内のファイルから取得できる。 query_module() システムコールは glibc ではサポートされていない。 glibc ヘッダーでは宣言は 提供されていないが、 歴史の紆余曲折を経て glibc はこのシステムコールに対する ABI を公開し ていない。 したがって、このシステムコールを利用するには、自分のコードの中で手動でインター フェースを宣言すればよい。 syscall(2) を使ってシステムコールを起動できる。
関連項目
create_module(2), delete_module(2), get_kernel_syms(2), init_module(2), lsmod(8), modinfo(8)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。