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/mem か savecore(8) が生成するクラッシュダンプコアのいずれかです。 corefile が NULL なら、 < 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 を返します。
関連項目
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), kmem(4), mem(4)バグ
2 つのオープン呼び出しがあるのは望ましくありません。 Sun ライブラリのあいまいなエラーセマンティクス (意味論) と BSD のための後方への互換のライブラリを持つ要望は、選択の余地を残しませんでした。January 29, 2004 | FreeBSD |