Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
getauxval - 補助ベクトルから値を取得する
書式
#include <sys/auxv.h> unsigned long getauxval(unsigned long type);
説明
getauxval() 関数は補助ベクトル (auxiliary vector) から値を取得する。 補助ベクトルは、 プロ グラムが実行される際に、 カーネルの ELF バイナリーローダーがユーザー空間にある種の情報を渡 すのに使われる仕組みである。 補助ベクトルの各エントリーは、 このエントリーを示すタイプとそのタイプの値のペアで構成され る。 引き数 type が指定されると、 getauxval() は対応する値を返す。 それぞれの type に対して返される値の詳細を以下に示す。 すべてのアーキテクチャーですべて type 値が存在するわけではない。 AT_BASE プログラムインタープリター (通常は動的ローダー) のベースアドレス。 AT_BASE_PLATFORM 実プラットフォームを示す文字列。 AT_PLATFORM と異なる値の場合がある。 (PowerPC の み) AT_CLKTCK times(2) のカウントが行われる周波数。 この値は sysconf(_SC_CLK_TCK) でも取得でき る。 AT_DCACHEBSIZE データキャッシュのブロックサイズ。 AT_EGID このスレッドの実効グループ ID。 AT_ENTRY 実行ファイルのエントリーアドレス。 AT_EUID このスレッドの実効ユーザー ID。 AT_EXECFD プログラムのファイルディスクリプター。 AT_EXECFN 実行プログラムに使用されたパス名。 AT_FLAGS フラグ (未使用)。 AT_FPUCW 使用された FPU 制御ワード (SuperH アーキテクチャーのみ)。 カーネルが実行した FPU 初 期化に関する情報を提供するためのものである。 AT_GID このスレッドの実グループ ID。 AT_HWCAP プロセッサーの詳細な機能 (capabilities) を示す複数バイトからなるビットマスクへのポ インターである。 このビットマスクの内容はハードウェア依存である (例えば、 Intel x86 アーキテクチャーに関する詳細はカーネルのソースファイル arch/x86/include/asm/cpufeature.h を参照)。 同じ情報を人が読みやすい形になっている のが /proc/cpuinfo である。 AT_ICACHEBSIZE 命令キャッシュのブロックサイズ。 AT_PAGESZ システムページサイズ (sysconf(_SC_PAGESIZE) が返す値と同じ)。 AT_PHDR 実行プログラムのプログラムヘッダーのアドレス。 AT_PHENT プログラムヘッダーエントリーのサイズ。 AT_PHNUM プログラムヘッダー数。 AT_PLATFORM このプログラムが実行されているハードウェアプラットフォームを特定する文字列へのポイ ンター。 動的リンカーは rpath 値の解釈を行う際にこの値を使用する。 AT_RANDOM ランダム値が入った 16 バイトがあるアドレス。 AT_SECURE この実行ファイルを安全に扱う必要がある場合に 0 以外の値になる。 一番よくある場合と しては、 0 以外の値になるのは、 そのプロセスが set-user-ID か set-group-ID されたプ ログラムを実行している場合である。 他の場合としては、 Linux Security Module が有効 になっている場合にも 0 以外の値となる。 この値が 0 以外の場合、 動的リンカーは特定 の環境変数の使用を無効化し (ld-linux.so(8) 参照)、 glibc はそのプロセスの動作を別の 観点で変更する (secure_getenv(3) 参照)。 AT_SYSINFO vDSO のシステムコール関数へのエントリーポイント。すべてのアーキテクチャーで存在する わけではなく、 また必要というわけでもない (例えば x86-64 には存在しない)。 AT_SYSINFO_EHDR 仮想動的共有オブジェクト (vDSO; virtual Dynamic Shared Object) が入ったページのアド レス。 vDSO は、 特定のシステムコールの高速な実装を提供するためにカーネルが作成する 共有オブジェクトである。 AT_UCACHEBSIZE ユニファイド (unified) キャッシュのブロックサイズ。 AT_UID このスレッドの実ユーザー ID。
返り値
成功すると、 getauxval() は type に対応する値を返す。 type が見つからない場合には 0 を返 す。
エラー
ENOENT (glibc 2.19 以降) type に対応するエントリーが補助ベクトルになかった。
バージョン
getauxval() 関数は glibc バージョン 2.16 で追加された。
属性
マルチスレッディング (pthreads(7) 参照) 関数 getauxval() はスレッドセーフである。
準拠
この関数は非標準で glibc による拡張である。
注意
補助ベクトルの情報を主に使用するのは、 動的ローダー ld-linux.so(8) である。 補助ベクトル は、 カーネルが動的リンカーが通常もしくは常に必要とするある意味標準的な情報を伝えるための 便利で効率的なショートカットである。 いくつかの場合では、 同じ情報がシステムコール経由でも 取得できるが、 補助ベクトルを使う方がコストがかからない。 補助ベクトルには、 単に、 プロセスのアドレス空間の引き数リストと環境上に存在するだけであ る。 プログラム実行時に LD_SHOW_AUXV 環境変数を設定すると、 プログラムに渡された補助ベクト ルを表示することができる。 $ LD_SHOW_AUXV=1 sleep 1 任意のプロセスの補助ベクトルは (ファイルのアクセス許可があれば) /proc/PID/auxv 経由で取得 できる。 詳細は proc(5) を参照。
バグ
glibc 2.19 で ENOENT エラーが追加される前は、 type が見つからなかった場合と type に対応す る値が 0 だった場合を明確に区別する方法がなかった。
関連項目
secure_getenv(3), vdso(7), ld-linux.so(8)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。