Skip to content

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 문서를 참조 하도록 합니다.

RETURN VALUE

성공 시에 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 을 따르며, 사용시의 어떠한 문제에 대하여 보증하지 않습니다.

참조

kr_close(3), kr_search(3)

Clone this wiki locally