tail head cat sleep
QR code linking to this page

manページ  — KVM_OPEN

名称

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 が使われます。

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)

KVM_OPEN (3) April 19, 1994

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

"I liken starting one's computing career with Unix, say as an undergraduate, to being born in East Africa. It is intolerably hot, your body is covered with lice and flies, you are malnourished and you suffer from numerous curable diseases. But, as far as young East Africans can tell, this is simply the natural condition and they live within it. By the time they find out differently, it is too late. They already think that the writing of shell scripts is a natural act."
— Ken Pier, Xerox PARC