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) 프로그램 라이브러리 routine를 개입시켜 커널 가상 메모리에 액세스 하기 위해서 사용되는 기술자를 돌려줍니다. 작동중 커널과 크래쉬 덤프의 양쪽 모두, 이 인터페이스 경유로 액세스 가능합니다.

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 만이 허가됩니다.

오픈 routine는 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 기술자를 요구합니다만, 오픈 routine는 오픈 실패 때에는 NULL (을)를 돌려주기 때문에, 오픈에 실패했을 때에는, kvm_geterr() (을)를 사용해 에러 메세지를 획득할 수 없습니다. 이러한 사정이 있기 (위해)때문에, kvm_openfiles() (은)는 임의의 에러 메세지를 errbuf 인수중에 둡니다. 이 버퍼의 크기는 _POSIX2_LINE_MAX 캐릭터분 필요합니다 (<limits.h> 로부터.

반환값
kvm_open() (와)과 kvm_openfiles() 의 함수는, 그 후의 모든 kvm 프로그램 라이브러리 호출로 사용하기 위한 기술자를 돌려줍니다. 프로그램 라이브러리는 완전하게 재입 가능합니다. 이상종료(ABEND)시에는 NULL 하지만 돌려주어집니다만, 이 경우, kvm_openfiles() (은)는 에러 메세지를 errbuf 에 기입합니다.

kvm_close() 함수는 정상 종료시에 0 을 돌려주어, 이상종료(ABEND)시에는 -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)