GETAUXVAL(3)

名前
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/ に書かれている。