모뎀 관리자 GUI는 sms.gdbm
모든 SMS 세부 정보를 저장하는 데이터베이스를 생성합니다. 현재 모뎀 관리자 GUI는 단순히 수신/발송된 모든 메시지를 삭제하는 기능을 제공하지 않습니다. 그래서 저는 이 기록들을 데이터베이스( sms.gdbm
)에서 삭제하는 프로그램을 만들려고 합니다. 하지만 먼저 데이터베이스의 구조를 알고 싶습니다 sms.gdbm
. 포함된 데이터베이스와 테이블 및 해당 열 이름입니다. 그렇다면 파일의 구조를 표시할 수 있는 CLI나 GUI 프로그램이 있습니까 *.gdbm
?
답변1
GDBM 데이터베이스는 GDBM API를 통해 읽을 수 있습니다. 이는 기본적으로 모든 유형의 간단한 키-값 쌍을 저장하는 방법입니다. 기존 DBMS와 같은 "구조"는 없습니다. 테이블도 없고 열도 없고 키와 값만 있습니다.
API는 다음 기능을 정의합니다.
GDBM_FILE gdbm_open (const char *name, int block_size, int flags, int mode, void (*fatal_func)(const char *));
void gdbm_close (GDBM_FILE dbf);
typedef struct {
char *dptr;
int dsize;
} datum;
int gdbm_store (GDBM_FILE dbf, datum key, datum content, int flag);
datum gdbm_fetch (GDBM_FILE dbf, datum key);
int gdbm_delete (GDBM_FILE dbf, datum key);
datum gdbm_firstkey (GDBM_FILE dbf);
datum datum gdbm_nextkey (GDBM_FILE dbf, datum prev);
const char * gdbm_strerror (gdbm_error errno);
기본적으로 API를 통해 파일을 열기만 하면 됩니다.
GDBM_FILE database = gdbm_open("sms.gdbm", 512, GDBM_READER, 0, NULL);
그리고 읽기 시작하세요:
#include <stdio.h>
#include <stdlib.h>
#include <gdbm.h>
int main(int argc, char** argv)
{
GDBM_FILE database = gdbm_open("sms.gdbm", 512, GDBM_READER, 0, NULL);
datum key, data;
for(key = gdbm_firstkey(database); /* get the first key */
key.dptr != NULL; /* keep going until the end */
key = gdbm_nextkey(database, key)) /* next key */
{
/* fetch data associated to key */
data = gdbm_fetch(database, key);
if(data.dptr != NULL)
printf("Entry found (%d bytes) : %s.\n", data.dsize, data.dptr);
}
gdbm_close(database);
return EXIT_SUCCESS;
}
데이터베이스에 저장되는 데이터 유형은 고정되어 있지 않습니다. 여기에는 문자열이 있을 것이라고 가정하고 있지만 그럴 수도 있습니다.아무것. 데이터는 바이너리 형식으로 저장되며 확인할 수 있는 것은 크기( data.dsize
)뿐입니다. API는 data.dptr
데이터의 시작 부분( )에 대한 포인터를 제공 하지만 이를 사용하여 수행하는 작업은 사용자에게 달려 있습니다.모뎀 관리자 GUI).
삭제하려는 항목을 찾으면 다음을 호출하세요 gdbm_delete
.
gdbm_delete(database, key);
작업이 끝나면 모두 닫는 것을 잊지 마세요. ;)
gdbm_close(database);
나는 사용 가능한 GDBM 리더 프로그램을 알지 못하지만 프로그램을 작성하는 데 많은 노력이 필요하지 않습니다. gdbm.h
컴파일할 때 GDBM 헤더( )를 포함하고 라이브러리를 연결하는 것을 잊지 마세요 .
gcc reader.c -o reader -lgdbm