#include #include#include#include#include

#define DATABASE "demo.db"

/*功能:解析日志提取数据(pv)

日志格式:pp.cn guest:123456 100*/

int parseLog(char *s,char **pv)

{int flag = 0;while(*s)

{if(*s==' ')

{if(flag==0)

{

s++;

flag++;continue;

}else{*s='\0';*pv = s+1;return;

}

}

s++;

}

}/*功能:打开伯克利DB的连接*/DB*openDb()

{intret;

DB*dbp =NULL;

ret= db_create(&dbp, NULL, 0);if(ret != 0)

{

exit(1);

}

ret= dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE,0664);if(ret != 0)

{

exit(1);

}returndbp;

}/*功能:存储用户的浏览信息*/

int saveViewInfo(DB *dbp, char *user, char *pv)

{intret;

DBT key , data;char oldpv[100] = {0};char newpv[100] = {0};//如果用户之前已经访问过了,那么PV等于之前的PV+现在的PV

if(findViewInfo(dbp, user, &oldpv) == 1)

{

sprintf(&newpv,"%d", atoi(pv) +atoi(oldpv));

printf("new new is %s\n", newpv);

}else{

strcpy(newpv,pv);

}//初始化数据

memset(&key, 0, sizeof(key));

memset(&data, 0, sizeof(data));

key.data=user;

key.size= strlen(user) + 1;

data.data=newpv;

data.size= strlen(newpv) + 1;//写入DB

ret = dbp->put(dbp, NULL, &key, &data, 0);if(ret == 0)

{

printf("db: %s key stored. value is %s\n", (char*)key.data, (char*)data.data);return 1;

}else{//dbp->err(dbp, ret "DB->put");

fprintf(stderr,"save Db error!\n");return 0;

}

}/*功能:查找是否已经存在浏览信息*/

int findViewInfo(DB *dbp, char *user, char *pv)

{intret;

DBT key, data;

memset(&key, 0, sizeof(key));

memset(&data, 0, sizeof(data));

key.data=user;

key.size= strlen(user) + 1;

printf("get : %s , it %d \n", key.data, key.size);

ret= dbp->get(dbp, NULL, &key, &data, 0);if(ret == 0)

{//从data里把数据复制出来,因为data是栈上数据,不能拿出去使用

strncpy(pv,data.data,data.size);

printf("get : key is %s : data is %s \n" , (char*)key.data, (char*) data.data);return 1;

}else{

fprintf(stderr,"read Db error!\n");return 0;

}

}int main (int argc, char **argv)

{

DB*dbp =NULL;

FILE*fp =NULL;char buffer[1024 * 4];

dbp=openDb();

fp= fopen("20130815.ul","r");

assert(fp!=NULL);while(fgets((char*)buffer, 1024*4,fp)!=NULL)

{char *user;char *pv;char newpv[100] = {0};

user= (char*)buffer;

parseLog(buffer,&pv);

saveViewInfo(dbp, user, pv);

findViewInfo(dbp,user,&newpv);

printf("now pv is %s\n", newpv);

memset(&buffer, 0, 1024 * 4);

}

dbp->close(dbp, 0);

}

c语言中如何存储日志,C语言解析日志,存储数据到伯克利DB相关推荐

  1. verilog语言中的@什么意思 verilog语言中的@什么意思

    verilog语言中的@什么意思 verilog语言中的@什么意思 2012-05-27 22:47 在英语中@ 读at,也就是在--的时候,这个小学应该学过,对吧.verilog中@ 的含义就是触发 ...

  2. c加加属于面向对象的程序设计语言吗,下列语言中属于面向对象的程序设计语言是______。A、Visual BasicB、PASCALC、CD、FORTRAN...

    下列语言中属于面向对象的程序设计语言是______.A.Visual BasicB.PASCALC.CD.FORTRAN 更多相关问题 经纬仪如存在指标差,将使观测结果出现( ). 德治的约束作用主要 ...

  3. C语言解析日志,存储数据到伯克利DB

    编译命令 gcc -o dbwriter dbwriter.c -ldb dbwriter.c #include <assert.h> #include <stdlib.h> ...

  4. c语言中*用于指针,关于C语言中指针的理解

    关于c语言中指针的一些理解 这几天在看任哲老师编写的嵌入式实时操作系统uC/OS原理与应用一书,第二章讲到指针的用法,我发现自己有些地方有疑问,就重新看了关于c指针的知识.同时也对指针有了一定的理解. ...

  5. c语言中的指针语法,C语言中指针的用法介绍

    C语言中指针的用法介绍 for(int i=0;i { num+=*s;s++; } return num; ) 这个例子中的函数 fun统计一个字符串中各个字符的 ASCII 码值之和.前面说了,数 ...

  6. c语言中字符串 x,使用c语言解析字符串176x144中的数字

    在做jpeg codec的时候,经常需要输入图片的大小,即长和宽.对于一个jpeg图片,它的大小几乎是任意的,所以只能用数字来表示,而不能选择cif,qcif等这类固定的图片格式.在用数字表示图片大小 ...

  7. c语言中字符串数组应用,C语言中字符变量字符串和字符数组应用.doc

    C语言中字符变量字符串和字符数组应用 字符变量(type`char`?字符串(string)和字符数组(type`char`arrary)是C语言中非常重要的结构成分,也是应用编程中常发生混淆?导致错 ...

  8. c语言中变量的大小,C语言变量定义

    C语言变量定义 程序设计就是让计算机按照一定的指令来进行工作,可以说数据的处理是程序设计的主要任务.那么数据是怎么加入到计算机的内存中呢?下面是小编分享的C语言变量定义,欢迎大家阅读!更多相关信息请关 ...

  9. C语言中简单的题目,C语言的一些简单题目,没有答案,哪位大神帮忙做一下!!!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 20.下面正确的语句是 . c语句中对嵌套if语句的规定是:else总是与___配对. A) 缩进位置相同的if B) 其同一复合语句中,前面最近的且尚未 ...

最新文章

  1. Linux平台下QtCreator集成代码静态分析工具clang-tidy和Clazy
  2. mysql注入 outfile_Mysql注入中的outfile、dumpfile、load_file函数详解
  3. j2ee学习 +“云未来
  4. html 多行多列列表格,HTML跨多行跨多列表格.doc
  5. cocos2d-js 3.0 jsb环境调用底层java代码
  6. PHP json_decode 对 JSON 格式的字符串进行编码并获取对应的值
  7. synaptic不停抖动后自动关闭的问题
  8. [渝粤教育] 广东-国家-开放大学 21秋期末考试建筑设备10327k1
  9. Apache 查看连接数
  10. 又是一年秋来到,学习要趁早,Power BI Desktop8月更新又来了
  11. java Function Interface BinaryOperator<T>
  12. nginx重写与重定向区别_nginx学习十一 rewrite url重写以及重定向
  13. SVN—怎么删除 SVN 上已有的URl
  14. Kafka 几个实现细节
  15. Qt moc文件缺少“stdafx.h”异常
  16. Key was created with errors:报错
  17. 访问图片出现403的解决办法
  18. 0x3f3f3f3f_《羊卓的杨的算法笔记》_Quentin
  19. Carson带你学Android:这是一份全面详细的属性动画学习攻略!
  20. canvas rotate 累加旋转_Canvas的变换

热门文章

  1. mysql 各种导入导出
  2. Sql server2005中如何格式化时间日期
  3. Crystal Report動態顯示圖片
  4. c语言怎么实现模块化vc,原创:在C语言中大概实现VC++中的CArray部分功能的两种方法...
  5. centos7桌面没有计算机图标,centos7下创建桌面图标的方法
  6. mybatis 不同格式日期比较大小_怎样创建一个命令函数来获得不同国家和应用程序所要求的大多数日期格式...
  7. Linux开启可视化进程传递pts,Linux下tty/pty/pts/ptmx详解(转)
  8. crowd counting_[crowd_counting]-SFANet-arxiv1902
  9. 设计灵感|网页建议页面(联系页面)版式案例
  10. 设计灵感|信息图表海报竟然能设计的这么有趣!