📄 msgdbx.c
字号:
#include <u.h>#include <libc.h>#include <db.h>#include "msgdb.h"struct Msgdb{ DB *db; int reset;};Msgdb*mdopen(char *file, int create){ Msgdb *mdb; DB *db; HASHINFO h; if((mdb = mallocz(sizeof(Msgdb), 1)) == nil) return nil; memset(&h, 0, sizeof h); h.cachesize = 2*1024*1024; if((db = dbopen(file, ORDWR|(create ? OCREATE:0), 0666, DB_HASH, &h)) == nil){ free(mdb); return nil; } mdb->db = db; mdb->reset = 1; return mdb;}longmdget(Msgdb *mdb, char *tok){ DB *db = mdb->db; DBT key, val; uchar *p; key.data = tok; key.size = strlen(tok)+1; val.data = 0; val.size = 0; if(db->get(db, &key, &val, 0) < 0) return 0; if(val.data == 0) return 0; if(val.size != 4) return 0; p = val.data; return (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3];}voidmdput(Msgdb *mdb, char *tok, long n){ uchar p[4]; DB *db = mdb->db; DBT key, val; key.data = tok; key.size = strlen(tok)+1; if(n <= 0){ db->del(db, &key, 0); return; } p[0] = n>>24; p[1] = n>>16; p[2] = n>>8; p[3] = n; val.data = p; val.size = 4; db->put(db, &key, &val, 0);}voidmdenum(Msgdb *mdb){ mdb->reset = 1;}intmdnext(Msgdb *mdb, char **sp, long *vp){ DBT key, val; uchar *p; DB *db = mdb->db; int i; i = db->seq(db, &key, &val, mdb->reset ? R_FIRST : R_NEXT); mdb->reset = 0; if(i) return -1; *sp = key.data; p = val.data; *vp = (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3]; return 0;}voidmdclose(Msgdb *mdb){ DB *db = mdb->db; db->close(db); mdb->db = nil;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -