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

📄 t.c

📁 mysql数据库源代码
💻 C
字号:
#include <sys/types.h>#include <errno.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include "db_185.h"void	err(char *);int	mycmp(const DBT *, const DBT *);void	ops(DB *, int);intmain(){	DB *dbp;	HASHINFO h_info;	BTREEINFO b_info;	RECNOINFO r_info;	printf("\tBtree...\n");	memset(&b_info, 0, sizeof(b_info));	b_info.flags = R_DUP;	b_info.cachesize = 100 * 1024;	b_info.psize = 512;	b_info.lorder = 4321;	b_info.compare = mycmp;	(void)remove("a.db");	if ((dbp =	   dbopen("a.db", O_CREAT | O_RDWR, 0664, DB_BTREE, &b_info)) == NULL)		err("dbopen: btree");	ops(dbp, DB_BTREE);	printf("\tHash...\n");	memset(&h_info, 0, sizeof(h_info));	h_info.bsize = 512;	h_info.ffactor = 6;	h_info.nelem = 1000;	h_info.cachesize = 100 * 1024;	h_info.lorder = 1234;	(void)remove("a.db");	if ((dbp =	    dbopen("a.db", O_CREAT | O_RDWR, 0664, DB_HASH, &h_info)) == NULL)		err("dbopen: hash");	ops(dbp, DB_HASH);	printf("\tRecno...\n");	memset(&r_info, 0, sizeof(r_info));	r_info.flags = R_FIXEDLEN;	r_info.cachesize = 100 * 1024;	r_info.psize = 1024;	r_info.reclen = 37;	(void)remove("a.db");	if ((dbp =	   dbopen("a.db", O_CREAT | O_RDWR, 0664, DB_RECNO, &r_info)) == NULL)		err("dbopen: recno");	ops(dbp, DB_RECNO);	return (0);}intmycmp(a, b)	const DBT *a, *b;{	size_t len;	u_int8_t *p1, *p2;	len = a->size > b->size ? b->size : a->size;	for (p1 = a->data, p2 = b->data; len--; ++p1, ++p2)		if (*p1 != *p2)			return ((long)*p1 - (long)*p2);	return ((long)a->size - (long)b->size);}voidops(dbp, type)	DB *dbp;	int type;{	FILE *outfp;	DBT key, data;	recno_t recno;	int i, ret;	char buf[64];	memset(&key, 0, sizeof(key));	memset(&data, 0, sizeof(data));	for (i = 1; i < 100; ++i) {		/* Test DB->put. */		sprintf(buf, "abc_%d_efg", i);		if (type == DB_RECNO) {			recno = i;			key.data = &recno;			key.size = sizeof(recno);		} else {			key.data = data.data = buf;			key.size = data.size = strlen(buf);		}		data.data = buf;		data.size = strlen(buf);		if (dbp->put(dbp, &key, &data, 0))			err("DB->put");	}	if (type == DB_RECNO) {			/* Test DB->get. */		recno = 97;		key.data = &recno;		key.size = sizeof(recno);	} else {		key.data = buf;		key.size = strlen(buf);	}	sprintf(buf, "abc_%d_efg", 97);	if (dbp->get(dbp, &key, &data, 0) != 0)		err("DB->get");	if (memcmp(data.data, buf, strlen(buf)))		err("DB->get: wrong data returned");	if (type == DB_RECNO) {			/* Test DB->put no-overwrite. */		recno = 42;		key.data = &recno;		key.size = sizeof(recno);	} else {		key.data = buf;		key.size = strlen(buf);	}	sprintf(buf, "abc_%d_efg", 42);	if (dbp->put(dbp, &key, &data, R_NOOVERWRITE) == 0)		err("DB->put: no-overwrite succeeded");	if (type == DB_RECNO) {			/* Test DB->del. */		recno = 35;		key.data = &recno;		key.size = sizeof(recno);	} else {		sprintf(buf, "abc_%d_efg", 35);		key.data = buf;		key.size = strlen(buf);	}	if (dbp->del(dbp, &key, 0))		err("DB->del");						/* Test DB->seq. */	if ((outfp = fopen("output", "w")) == NULL)		err("fopen: output");	while ((ret = dbp->seq(dbp, &key, &data, R_NEXT)) == 0) {		if (type == DB_RECNO)			fprintf(outfp, "%d\n", *(int *)key.data);		else			fprintf(outfp,			    "%.*s\n", (int)key.size, (char *)key.data);		fprintf(outfp, "%.*s\n", (int)data.size, (char *)data.data);	}	if (ret != 1)		err("DB->seq");	fclose(outfp);	switch (type) {	case DB_BTREE:		ret = system("cmp output O.BH");		break;	case DB_HASH:		ret = system("sort output | cmp - O.BH");		break;	case DB_RECNO:		ret = system("cmp output O.R");		break;	}	if (ret != 0)		err("output comparison failed");	if (dbp->sync(dbp, 0))			/* Test DB->sync. */		err("DB->sync");	if (dbp->close(dbp))			/* Test DB->close. */		err("DB->close");}voiderr(s)	char *s;{	fprintf(stderr, "\t%s: %s\n", s, strerror(errno));	exit (1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -