スポンサーリンク

KVM_OPEN(3) FreeBSD ライブラリ関数マニュアル KVM_OPEN(3)

名称

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

ライブラリ

カーネルデータアクセスライブラリ (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 が使われます。

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

スポンサーリンク