KVM_OPEN(3) FreeBSD ライブラリ関数マニュアル KVM_OPEN(3)
名称
kvm_open, kvm_openfiles, kvm_close − カーネル仮想メモリアクセスの初期化 |
ライブラリ
カーネルデータアクセスライブラリ (libkvm, −lkvm) |
書式
#include <fcntl.h> kvm_t * |
kvm_open(const char *execfile, const char *corefile, const char *swapfile, int flags, const char *errstr); kvm_t * |
kvm_openfiles(const char *execfile, const char *corefile, const char *swapfile, int flags, char *errbuf); int |
kvm_close(kvm_t *kd); |
解説 |
kvm_open() と kvm_openfiles() の各関数は kvm(3) ライブラリルーチンを介し カーネル仮想メモリにアクセスするために使われる記述子を返します。作動中 カーネルとクラッシュダンプの双方とも、このインタフェース経由でアクセス可 能です。 execfile は、検証されるカーネルの実行可能イメージです。このファイルにはシ ンボルテーブルが含まれる必要があります。この引数が NULL のとき、現在実行 中のシステムと仮定して getbootfile(3) から決定されます。 corefile はカーネルメモリデバイスファイルで、/dev/mem か savecore(8) が生 成するクラッシュダンプコアのいずれかです。 corefile が NULL のと き、<paths.h> が指示するデフォルト値 _PATH_MEM が使われます。 swapfile はスワップデバイスを指示します。 NULL のとき、<paths.h> の _PATH_DRUM が使われます。 flags 引数は、 open(2) 同様に読取り / 書込みアクセスフラグを示し、コア ファイルに限定して適用します。 O_RDONLY, O_WRONLY, O_RDWR だけが許可され ます。 オープンルーチンは 2 個あり、その違いはエラー機構だけです。一方は SunOS kvm ライブラリと後方互換性があり、他方は改善されたエラー報告フレームワー クを提供します。 kvm_open() 関数は Sun kvm と互換のオープン呼び出しです。ここでは、 errstr 引数はエラーの処理方法を示します。 NULL のとき、エラーは報告されず、アプ リケーションプログラムは kvm 呼び出しが失敗した原因は知らされません。 NULL でなければ、 perror(3) 同様に、前に errstr が付加されたメッセージが stderr に印字されます。通常、プログラム名が使われます。少なくとも対応する kvm_close() 呼び出しまでは、この文字列は変わらないものと仮定されます。 kvm_openfiles() 関数は BSD 様式のエラー報告を行います。ライブラリは、エ ラーメッセージを印字しません。代わりに、アプリケーションが kvm_geterr() (kvm_geterr(3) 参照) を使用して、一番最後の kvm library 呼び出しに該当す るエラーメッセージを獲得します。最後の kvm 呼び出しが正常であれば、結果は 未定義となります。 kvm_geterr() は kvm 記述子を要求しますが、オープンルー チンはオープン失敗のときには NULL を返しますので、オープンに失敗したとき には、 kvm_geterr() を使ってエラーメッセージを獲得できません。このような 事情があるため、 kvm_openfiles() は任意のエラーメッセージを errbuf 引数中 に置きます。このバッファの大きさは _POSIX2_LINE_MAX 文字分必要です (<limits.h> より)。 |
戻り値
kvm_open() と kvm_openfiles() の関数は、その後のすべての kvm ライブラリ呼 び出しで使用するための記述子を返します。ライブラリは完全に再入可能です。 異常終了時には NULL が返されますが、この場合、 kvm_openfiles() はエラー メッセージを errbuf に書き込みます。 kvm_close() 関数は正常終了時に 0 を返し、異常終了時には -1 を返します。 |
バグ
オープン呼び出しが 2 種類ある現状は望ましくありません。 Sun ライブラリの エラーセマンティクスが誤って定義されていたこと、 BSD において後方互換ライ ブラリを持ちたかったことは、選択の余地をほとんど残しませんでした。 |
関連項目
open(2), kvm(3), kvm_getargv(3), kvm_getenvv(3), kvm_geterr(3), kvm_getprocs(3), kvm_nlist(3), kvm_read(3), kvm_write(3) FreeBSD 10.0 April 19, 1994 FreeBSD 10.0 |