控制台参数处理berkeley db测试小程序
来源:互联网 发布:网络推广方案分析 编辑:程序博客网 时间:2024/05/18 01:09
仅仅是实验,远远不完善。
./dbtest -n create a new db
./dbtest -f xxxx 查找关键字为XXXX的记录。
./dbtest -a xxxx
./dbtest -d xxxx
./dbtest -n create a new db
./dbtest -f xxxx 查找关键字为XXXX的记录。
./dbtest -a xxxx
./dbtest -d xxxx
CODE:
/*
* db test code. seeker. 2005.12
* to compile
* gcc -o dbtest -g -ldb id.c
*
*
*/
#include <db.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
typedef struct {
time_t time;
unsigned int count;
//char name[120];
} ID_STRUCT;
ID_STRUCT id;
#define DB_FILE "id.db"
#define DB_BTREE DB_HASH
void error(int ret)
{
if(ret != 0) {
printf("ERROR: %s/n",db_strerror(ret));
}
}
void init_val(DBT * key, DBT * data)
{
memset(key, 0, sizeof(DBT));
memset(data, 0, sizeof(DBT));
}
cursor(DB *dbp)
{
unsigned long cur;
if (dbp->cursor(dbp, NULL, &cur, 0) != 0) {
return NULL;
}
printf("dba->cursor = %p/n", cur);
}
show(void *k, void *d)
{
printf("%p %p/n", k, d);
}
/*
* PUBLIC: int __db_pr_callback __P((void *, const void *));
*/
int
__db_pr_callback(handle, str_arg)
void *handle;
const void *str_arg;
{
char *str;
FILE *f;
str = (char *)str_arg;
f = (FILE *)handle;
if (fprintf(f, "%s", str) != (int)strlen(str))
return (-1);
return (0);
}
void main(int argc, char **argv)
{
FILE *fp;
char *cp;
char buf[256];
unsigned long ip;
int r;
DB *dbp;
DBT key, data;
u_int32_t flags;
int ret;
ret = db_create(&dbp, NULL, 0);
//create a new db
if(argc > 1 && argv[1][0] == 'n') {
flags = DB_CREATE;
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
for(r = 0; r < 64*1024; r++) {
ip = random();
if(r == 63*1024) ip = 0x10101010;
cp = inet_ntoa(*(struct in_addr*)&ip);
strcpy(buf, cp);
printf("%s/n", cp);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
id.count = 1;
id.time = 0x01020304; //time(0);
//strcpy(id.name, cp);
data.size = sizeof(ID_STRUCT);
data.data = &id;
ret = dbp->put(dbp, NULL, &key, &data,DB_NOOVERWRITE);
error(ret);
//printf("cp = %s/n", cp);
}
dbp->close(dbp, 0);
printf("r = %d/n", r);
exit(0);
}
//find a record
if(argc > 2 && (argv[1][0] == 'f')) {
strcpy(buf, argv[2]);
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
memset(&id, 0, sizeof(ID_STRUCT));
printf("ret = %d/n", ret);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
data.data = &id;
data.ulen = sizeof(id);
data.flags = DB_DBT_USERMEM;
ret = dbp->get(dbp, NULL, &key, &data, 0);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
printf("ret = %d/n", ret);
error(ret);
cursor(dbp);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
//delete a key
if(argc > 2 && (argv[1][0] == 'd')) {
strcpy(buf, argv[2]);
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
memset(&id, 0, sizeof(ID_STRUCT));
printf("ret = %d/n", ret);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
ret = dbp->del(dbp, NULL, &key, 0);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
printf("ret = %d/n", ret);
error(ret);
cursor(dbp);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
//dump
if(argc > 1 && (argv[1][0] == 'i')) {
int pflag = 1;
int keyflag = 0;
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
printf("dump./n");
ret = dbp->dump(dbp, NULL, __db_pr_callback, stdout, pflag, keyflag);
//ret = dbp->dump(dbp, NULL, show, 0, 1, 20);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
//printf("ret = %d/n", ret);
error(ret);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
//add a key
if(argc > 2 && (argv[1][0] == 'a')) {
strcpy(buf, argv[2]);
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
memset(&id, 0, sizeof(ID_STRUCT));
printf("ret = %d/n", ret);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
id.count = 2;
if(argv[3]) id.count = atol(argv[3]);
id.time = 0x01020304; //time(0);
if(argv[4]) id.time = atol(argv[4]);
//strcpy(id.name, cp);
data.size = sizeof(ID_STRUCT);
data.data = &id;
ret = dbp->put(dbp, NULL, &key, &data,DB_NOOVERWRITE);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
printf("ret = %d/n", ret);
error(ret);
cursor(dbp);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
}
* db test code. seeker. 2005.12
* to compile
* gcc -o dbtest -g -ldb id.c
*
*
*/
#include <db.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
typedef struct {
time_t time;
unsigned int count;
//char name[120];
} ID_STRUCT;
ID_STRUCT id;
#define DB_FILE "id.db"
#define DB_BTREE DB_HASH
void error(int ret)
{
if(ret != 0) {
printf("ERROR: %s/n",db_strerror(ret));
}
}
void init_val(DBT * key, DBT * data)
{
memset(key, 0, sizeof(DBT));
memset(data, 0, sizeof(DBT));
}
cursor(DB *dbp)
{
unsigned long cur;
if (dbp->cursor(dbp, NULL, &cur, 0) != 0) {
return NULL;
}
printf("dba->cursor = %p/n", cur);
}
show(void *k, void *d)
{
printf("%p %p/n", k, d);
}
/*
* PUBLIC: int __db_pr_callback __P((void *, const void *));
*/
int
__db_pr_callback(handle, str_arg)
void *handle;
const void *str_arg;
{
char *str;
FILE *f;
str = (char *)str_arg;
f = (FILE *)handle;
if (fprintf(f, "%s", str) != (int)strlen(str))
return (-1);
return (0);
}
void main(int argc, char **argv)
{
FILE *fp;
char *cp;
char buf[256];
unsigned long ip;
int r;
DB *dbp;
DBT key, data;
u_int32_t flags;
int ret;
ret = db_create(&dbp, NULL, 0);
//create a new db
if(argc > 1 && argv[1][0] == 'n') {
flags = DB_CREATE;
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
for(r = 0; r < 64*1024; r++) {
ip = random();
if(r == 63*1024) ip = 0x10101010;
cp = inet_ntoa(*(struct in_addr*)&ip);
strcpy(buf, cp);
printf("%s/n", cp);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
id.count = 1;
id.time = 0x01020304; //time(0);
//strcpy(id.name, cp);
data.size = sizeof(ID_STRUCT);
data.data = &id;
ret = dbp->put(dbp, NULL, &key, &data,DB_NOOVERWRITE);
error(ret);
//printf("cp = %s/n", cp);
}
dbp->close(dbp, 0);
printf("r = %d/n", r);
exit(0);
}
//find a record
if(argc > 2 && (argv[1][0] == 'f')) {
strcpy(buf, argv[2]);
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
memset(&id, 0, sizeof(ID_STRUCT));
printf("ret = %d/n", ret);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
data.data = &id;
data.ulen = sizeof(id);
data.flags = DB_DBT_USERMEM;
ret = dbp->get(dbp, NULL, &key, &data, 0);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
printf("ret = %d/n", ret);
error(ret);
cursor(dbp);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
//delete a key
if(argc > 2 && (argv[1][0] == 'd')) {
strcpy(buf, argv[2]);
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
memset(&id, 0, sizeof(ID_STRUCT));
printf("ret = %d/n", ret);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
ret = dbp->del(dbp, NULL, &key, 0);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
printf("ret = %d/n", ret);
error(ret);
cursor(dbp);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
//dump
if(argc > 1 && (argv[1][0] == 'i')) {
int pflag = 1;
int keyflag = 0;
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
printf("dump./n");
ret = dbp->dump(dbp, NULL, __db_pr_callback, stdout, pflag, keyflag);
//ret = dbp->dump(dbp, NULL, show, 0, 1, 20);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
//printf("ret = %d/n", ret);
error(ret);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
//add a key
if(argc > 2 && (argv[1][0] == 'a')) {
strcpy(buf, argv[2]);
ret = dbp->open(dbp, NULL, DB_FILE, NULL,
DB_BTREE, //DB_HASH,
flags, 0);
error(ret);
memset(&id, 0, sizeof(ID_STRUCT));
printf("ret = %d/n", ret);
init_val(&key, &data);
key.size = strlen(buf);
key.data = buf;
id.count = 2;
if(argv[3]) id.count = atol(argv[3]);
id.time = 0x01020304; //time(0);
if(argv[4]) id.time = atol(argv[4]);
//strcpy(id.name, cp);
data.size = sizeof(ID_STRUCT);
data.data = &id;
ret = dbp->put(dbp, NULL, &key, &data,DB_NOOVERWRITE);
if(!ret) {
printf("data: %d %x/n", id.count, id.time);
}
printf("ret = %d/n", ret);
error(ret);
cursor(dbp);
if(dbp != NULL)
dbp->close(dbp, 0);
exit(0);
}
}
- 控制台参数处理berkeley db测试小程序
- Berkeley DB示例程序详解 (1)
- Berkeley DB 示例程序详解(2)
- Berkeley DB示例程序详解(3.1)
- Berkeley DB示例程序详解(3.2)
- Berkeley DB Replication示例程序(一)
- Berkeley DB Replication示例程序(二)
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB
- Berkeley DB (DB)介绍
- Berkeley DB -- DB Environment
- c++博大精深——c++的构造函数解析
- Javascript处理DOM元素事件
- 解决Form表单重复提交问题
- 以berkeley db为例分析三种使用非Qt的外部库的方法
- 图解Fat jar的使用
- 控制台参数处理berkeley db测试小程序
- 分布式事务处理
- ACID, BASE和CAP
- 网页制作 tr&td
- js杂记
- 求助文法分析器,谢谢!
- ServiceDescription.Types 属性
- Struts解决重复提交问题
- 设计模式--责任链模式(COR)