본문 바로가기

Programming/C/C++

[C/C++] Berkeley DB


회사에서 개발 관련해서 자주 Berkeley DB를 사용합니다.

오픈 소스에, 트랜잭션 관리도 가능하고 속도도 빠르고 좋네요.

다운로드 받고, 사용하는 방법같은 것도 포스팅을 해야하겠으나..

하도 오랜만에 포스팅을 하는 바람에..우선은 간단히 아는 것들 부터 하나씩 적어보겠습니다.

오늘 있었던 일은..

Bekeley DB를 open 할때 한글 파일 경로명에서는 open()이 실패하는 것을 수정하는 것이었습니다.
뭐 대단한 문제는 아니었고..open() 의 경로 및 DB 파일 이름을 UTF-8 Encoding으로 주면 한글문제가 해결 되었습니다.

open() 함수의 선언은 다음과 같습니다.

Db::open(DbTxn *txnid, const char *file,
    const char *database, DBTYPE type, u_int32_t flags, int mode);


요기서 *file 에 Ansi 인코딩된 한글을 포함한 경로 및 파일 명이 있을 경우 Exception이 발생하게 됩니다.

No Search File and..path 였나..정확히 기억은 안납니다.

UTF-8 변환 방법도 성격상 함께 다루어야 하나...핵심은 그것이 아니므로..

그리고 마지막으로 한 가지..Berkeley DB는 Open시에 폴더들을 생성시켜주지 않습니다.

때문에 폴더를 만들어 준후 DB 파일을 open()해야만 DB파일이 생성됩니다.