📄 db.c.svn-base
字号:
#include <db.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define DATABASE "demo.db"void _read(DB *dbp, int n);void _write(DB *dbp, int n);void _all(DB *dbp, int n);void _delete(DB *dbp, int n);typedef struct { int id; int mt_id; float in, out;} DATA, *PDATA;/* 以下程序代码的程序头同此 */int main(int argc, char *argv[]){ DB *dbp; int ret; if ((ret = db_create(&dbp, NULL, 0)) != 0) { fprintf(stderr, "db_create: %s\n", db_strerror(ret)); exit (1); } if ((ret = dbp->set_re_len(dbp, sizeof(DATA))) != 0) { dbp->err(dbp, ret, "set_re_len: %s\n", db_strerror(ret)); return -1; } if ((ret = dbp->open(dbp, DATABASE, NULL, DB_QUEUE, DB_CREATE, 0664)) != 0) { dbp->err(dbp, ret, "%s", DATABASE); exit (1); } if (argc != 3) { printf("Usage: %s [rwda] n\n", argv[0]); exit(0); } if (argv[1][0] == 'r') _read(dbp, atoi(argv[2])); else if (argv[1][0] == 'w') { int n = atoi(argv[2]); while(n--) _write(dbp, n); } else if (argv[1][0] == 'a') //print all { _all(dbp, atoi(argv[2])); _all(dbp, atoi(argv[2])); } else if (argv[1][0] == 'd') _delete(dbp, atoi(argv[2])); dbp->close(dbp, 0); return 0;}void _read(DB *dbp, int n){ DBT key, data; DATA *d; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); int a = n; key.data = &a; key.size = sizeof(int); dbp->get(dbp, NULL, &key, &data, 0); d = data.data; if (d == NULL) { printf("No record.\n"); return; } printf("db read: key=%d, id=%d, mt_id=%d, in=%f, out=%f\n", *((int *)key.data), d->id, d->mt_id, d->in, d->out);}void _write(DB *dbp, int n){ DBT key, data; int ret; DATA *d = (DATA *)malloc(sizeof(DATA)); d->id = n; d->mt_id = 14 * n; d->in = 5.20 * n; d->out = 3.71 * n; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); key.data = &(n); key.size = sizeof(int); data.data = d; data.size = sizeof(DATA); if ((ret = dbp->put(dbp, NULL, &key, &data, DB_APPEND)) == 0) printf("db: %d: key stored.\n", *((int *)key.data)); else dbp->err(dbp, ret, "DB->put"); free(d);}void _all(DB *dbp, int n){ DBT key, data; int ret; DBC * cur; DATA *d; int i = 0; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); dbp->cursor(dbp, NULL, &cur, 0); while((ret = cur->c_get(cur, &key, &data, DB_NEXT)) == 0) { d = data.data; int key_id = *((int *)key.data); printf("db read: key=%d, id=%d, mt_id=%d, in=%f, out=%f\n", key_id, d->id, d->mt_id, d->in, d->out); if (key_id % 2 == 0) { printf("del key=%d\n", key_id); cur->c_del(cur, 0); } i++; if (i >= n) { printf ("max reached.\n"); return; } } cur->c_close(cur);}void _delete(DB *dbp, int n){ DBT key, data; memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data)); int a = n; key.data = &a; key.size = sizeof(int); dbp->del(dbp, NULL, &key, 0); printf("db del: key=%d\n", *((int *)key.data));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -