KVM_OPEN(3)

名称
kvm_open, kvm_openfiles, kvm_close - カーネル仮想メモリアクセスの初期化

ライブラリ
libkvm

書式
#include <fcntl.h> #include <kvm.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)