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

📄 gdbm.c

📁 C编写的用来实现search engine的推荐功能
💻 C
字号:
/***************************************************************************************** Copyright (c) 2006* All rights reserved.*       * $Id****************************************************************************************/#include <gdbm.h>#include <stdio.h>#include <fcntl.h>#include <string.h>//定义大数组#define MAXKEYLEN	255#define MAXVALUELEN	3096int query_gdbm(GDBM_FILE db,char *key);int create_gdbm(GDBM_FILE db,char *srcFile);int main(int argc,char **argv){		GDBM_FILE db = NULL;	char *dbName=NULL;	char *srcFile =NULL;	char *use;		int beginSecond;	int endSecond;	int totalSecond;		if (argc != 4)	{		printf("usage %s -c|-s dbname srcfile\n",argv[0]);		return 1;	}		use = argv[1];	dbName =argv[2];		//db = gdbm_open(dbName, 1024, GDBM_READER |GDBM_WRITER |GDBM_WRCREAT, 0660 ,0);		if (strcmp(use,"-c")==0)	{		/*		*创建数据库,dbName是数据库文件名,1024是从硬盘到内存的块的大小,GDBM_WRITER是写的权限,GDBM_WRCREAT是创建的权限		*0660是mode,0表示用缺省的函数		*/		db = gdbm_open(dbName, 2048, GDBM_WRITER |GDBM_WRCREAT, 0644 ,0);				if (db ==NULL)		{			printf("create %s error\n",dbName);			return 0;		}				//记录开始的时间,单位为秒		beginSecond = time((time_t *)NULL);		srcFile = argv[3];				//调用函数		create_gdbm(db,srcFile);				//关闭数据库文件		gdbm_close(db);				//记录结束时间		endSecond = time((time_t *)NULL);				//得到创建数据库文件所发费的总时间		totalSecond = endSecond - beginSecond;		printf("spend total time is :%d seconds\n", totalSecond);		return 0;	}		else if (strcmp(use,"-s")==0)	{		/*		*打开数据库,dbName是数据库文件名,1024是从硬盘到内存的块的大小,GDBM_READER是读的权限		*0660是mode,0表示用缺省的函数		*/		db = gdbm_open(dbName, 2048, GDBM_READER , 0400 ,0);				if (db ==NULL)		{			printf("open %s error\n",dbName);			return 1;		}				//调用查询函数		query_gdbm(db,argv[3]);				//关闭数据库文件		gdbm_close(db);		return 0;	}	else	{		gdbm_close(db);		printf("use error\n");		return 1;	}}//创建gdbm数据库int create_gdbm(GDBM_FILE db,char *srcFile){		datum name;	datum value;	datum mytest;	FILE *fp;	int ret;		char word[MAXKEYLEN];	char url[MAXVALUELEN];	char line[30960];	char *ptr = NULL;	char *pptr = NULL;	fp = fopen(srcFile,"r");		if (fp ==NULL)	{		printf(" error open %s\n",srcFile);		return 1;	}		while (fgets(line, 3096, fp) != NULL)	{		line[3095] = 0;		memset(word,0,MAXKEYLEN);		memset(url,0,MAXVALUELEN);		ptr = strchr(line, '\t');		if(ptr == NULL) continue;		*ptr = '\0';		strncpy(word, line, 255);		word[254] = '\0';		pptr = ptr + 1;		if(pptr == NULL) continue;		strncpy(url, pptr, 3096);		url[3095] = 0;		ptr = strchr(url, '\n');		if(ptr != NULL) *ptr = '\0';		if(url[0] == '\0' || strlen(url) <=1) continue;		//fscanf(fp,"%s\t%s\n", word,url);				//printf("%s\t%s\n", word,url);		//word[strlen(word)]='\0';		//url[strlen(url)]='\0';				name.dptr = word;		name.dsize = strlen(word);		value.dptr = url;		value.dsize = strlen(url);				//把结构体name,value的内容插入到数据库文件中去		ret = gdbm_store(db, name, value, GDBM_INSERT);			}		strcpy(word,"PLASTICSPACK");	word[strlen(word)]='\0';	memset(&name,0,sizeof(name));	name.dptr=word;	name.dsize=sizeof(word);	printf("name.dprt=%s\tlen dptr=%d\tname.dsize=%d\n",name.dptr,strlen(name.dptr),name.dsize);		mytest = gdbm_fetch(db, name);	if (mytest.dptr)		printf("name %s\tvalue %s\n",name.dptr,mytest.dptr);			memset(word,0,MAXKEYLEN);	strcpy(word,"IMPORTER");	word[strlen(word)]='\0';	memset(&name,0,sizeof(name));	name.dptr=word;	name.dsize=sizeof(word);	printf("name.dprt=%s\tlen dptr=%d\tname.dsize=%d\n",name.dptr,strlen(name.dptr),name.dsize);		//根据nam在数据库中查找value的值	mytest = gdbm_fetch(db, name);	if (mytest.dptr)		printf("name %s\tvalue %s\n",name.dptr,mytest.dptr);		fclose(fp);	return 0;}//查询一条记录int query_gdbm(GDBM_FILE db,char *key){		datum name;	datum value;	char word[MAXKEYLEN];		name.dptr=key;	name.dsize=strlen(key);	//根据nam在数据库中查找value的值	value = gdbm_fetch(db, name);		if (value.dptr !=NULL)	{		printf("name %s\tvalue %s\n",name.dptr,value.dptr);		free(value.dptr);	}		else	{		printf("found not \n");	}			return 0;}	

⌨️ 快捷键说明

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