因为缓存数据的buffer总是不够大(会引起段错误)索性从堆上拿了两块大内存
/* 功能说明:逐日存储来访用户(使用伯克利DB) 根据存储的用户信息确定某用户是否是首次来访用户(未被存储的伯克利DB) 调用方式1: 查询游客在2013年8月8日是否访问了指定渠道 ./channeldb -s "bch2000 guest:123456789" 20130808 调用方式2:将指定文件里的用户信息写入DB,同时将该文件里的首次访问用户写入日志 ./channeldb -f 20130809 ./clog/20130809.log 20130809 */ #include <assert.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <db.h> #include <sys/types.h> #include <getopt.h> #define DATABASE "/mnt/disk1/ucshuqi/touch/userlist/historydb/channel.db" #define YES 1 #define NO 0 #define BUFFER_SIZE 1024 * 8 char *readBuffer = NULL; char *writeBuffer = NULL; /* ViewData 组件:记录 用户第一次来访时需要记录的数据,例如日期 */ struct ViewData { int date; }; void setDate(struct ViewData *data,char *s) { assert(data!=NULL && s!= NULL && strlen(s) == 8); data->date = atoi(s); } /*当 query.date >= stored.date 返回YES,即包含此附属数据的用户信息是历史来访用户*/ int isHistoryViewInfo(struct ViewData *query , struct ViewData *stored) { assert(query != NULL && stored != NULL); printf("query date is %d , stored date is %d ",query->date, stored->date); if(query->date >= stored->date) { return YES; } else { return NO; } } void printViewData(struct ViewData *data) { assert(data != NULL); printf("print view date : %d ",data->date); } /* string helper module */ char *trim(char *s) { int i; assert(s!=NULL); i = strlen(s); for(;i>0;i--) { if(s[i]==' ' || s[i]==' ' || s[i]=='