EN JA
KVM_OPEN(3)
KVM_OPEN(3) FreeBSD Library Functions Manual KVM_OPEN(3)

名称

kvm_open, kvm_openfiles, kvm_closeカーネル仮想メモリアクセスを初期化する

ライブラリ

Kernel Data Access Library (libkvm, -lkvm)

書式

#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/memsavecore(8) が生成するクラッシュダンプコアのいずれかです。 corefileNULL なら、 < paths.h> にある _PATH_MEM で示されるデフォルト値が使われます。 ps(1) のように直接カーネルメモリにアクセスしないユーティリティによって特別な値 /dev/null に設定することもできます。

swapfile 引数は現在未使用です。

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 ライブラリ呼び出しに対応するエラーメッセージを獲得します。最新の kvm 呼び出しがエラーを生成しなかったなら、結果は不確定です。 kvm_geterr() は kvm 記述子を要求しますが、オープンルーチンは失敗すると NULL を返しますので、オープンに失敗したなら、 kvm_geterr() はエラーメッセージを獲得するために使用できません。したがって、 kvm_openfiles() は errbuf 引数にあらゆるメッセージを置きます。このバッファの大きさは (<limits.h>の) _POSIX2_LINE_MAX 文字であるべきです。

戻り値

kvm_open() と kvm_openfiles() 関数は、その後のすべての kvm ライブラリ呼び出しで使用される記述子を返します。ライブラリは完全に再入可能です。異常終了時には NULL が返されますが、この場合、 kvm_openfiles() は、エラーメッセージを errbuf に書き込みます。

kvm_close() 関数は、正常終了時に 0 を返し、異常終了時には -1 を返します。

バグ

2 つのオープン呼び出しがあるのは望ましくありません。 Sun ライブラリのあいまいなエラーセマンティクス (意味論) と BSD のための後方への互換のライブラリを持つ要望は、選択の余地を残しませんでした。
January 29, 2004 FreeBSD