-
Notifications
You must be signed in to change notification settings - Fork 2
API kr_open (KO)
JoungKyun Kim edited this page Jul 13, 2016
·
2 revisions
kr_open - libkrisp 의 database handle을 반환 합니다.
#include <krisp.h>
typedef struct db_argument {
char err[1024];
char database[256];
#ifdef HAVE_PTHREAD_H
pthread_mutex_t mutex;
#endif
#if defined(HAVE_LIBSQLITE3)
sqlite3 * c; // db resource
sqlite3_stmt * vm; // sqlite vm
#else
sqlite * c; // db resource
sqlite_vm * vm; // sqlite vm
#endif
const char ** rowdata;
const char ** colname;
char * table;
char * old_table;
#if defined(HAVE_LIBSQLITE)
char * dberr; // vm error message
#endif
int rows; // vm rows
int cols; // number of columns
time_t db_time_stamp; // database mtime stamp
time_t db_stamp_checked; // record db mtime check time
//db mtime stamp check interval. If value is 0, don’t check
time_t db_time_stamp_interval;
short verbose;
#ifdef HAVE_PTHREAD_H
short threadsafe;
#endif
short r; // execute result code
short final; // force finalize
} KR_API;
bool kr_open (KR_API ** db, char * path, char * err);
bool kr_open_safe (KR_API ** db, char * path, char * err);
kr_open API 는 libkrisp 를 링크하여 databse 파일을 열기 위해 사용합니다. kr_open API의 argument 는 database 연결에 사용되는 KR_API structure 와 database 파일의 경로를 지정을 합니다. 세번째 인자는 kr_open API가 실행에 실패할 경우, 에러 메시지를 담게 됩니다.
KR_API structure 는 krispcommon.h 에 정의가 되어 있으며, kr_open 을 호출하기 전에 다음과 같이 정의 되어 있어야 합니다.
KR_API *db;
char *err[1024];
if ( kr_open (&db, NULL, err) == false ) {
..
}
kr_open api 대신 kr_open_safe api를 호출하면 kr_search api가 실행을 할 때 thread lock을 걸게 된다. 이와 관련해서는 libkrisp의 thread 문서를 참조 하도록 합니다.
성공 시에 true를 반환하며, 실패 시에 false를 반환 합니다.
#include <krisp.h>
int main (void) {
KR_API * db;
KRNET_API isp;
char * addr = "kns.kornet.net";
char * database = NULL;
char err[1024];
if ( kr_open (&db, database, err) == false ) {
fprintf (stderr, "ERROR Connect: %s\n", err);
return 1;
}
isp.verbose = false;
// defined safecpy_256 in krispapi.h
safecpy_256 (isp.ip, addr);
if ( kr_search (&isp, db) ) {
printf ("ERROR: %s\n", isp.err);
kr_close (&db);
return 1;
}
kr_close (&db);
/*
* long2ip is include libipcalc.
* long2ip is returned in a statically allocated buffer, which
* https://github.com/Joungkyun/libipcalc/wiki/API-long2ip
* subsequent calls will overwrite. For thread safe, use long2ip_r.
*/
printf ("%-15s %-15s %-20s", ip, isp.ip, isp.icode);
printf ("%-15s ", long2ip (isp.start));
printf ("%-15s %s", long2ip (isp.end), isp.iname);
return 0;
}
김정균 >https://joungkyun.github.com>
https://github.com/Joungkyun/libkrisp/issues
Copyright (c) 2016 JoungKyun.Kim <http://oops.org>
이 API는 LGPL 을 따르며, 사용시의 어떠한 문제에 대하여 보증하지 않습니다.