⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgdbx.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 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 + -