zlog学习笔记(mdc)
mdc.h
#ifndef __zlog_mdc_h
#define __zlog_mdc_h #include "zc_defs.h" typedef struct zlog_mdc_s zlog_mdc_t;
struct zlog_mdc_s{
zc_hashtable_t *tab;
}; zlog_mdc_t *zlog_mdc_new(void);
void zlog_mdc_del(zlog_mdc_t *a_mdc);
void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag); void zlog_mdc_clean(zlog_mdc_t *a_mdc);
int zlog_mdc_put(zlog_mdc_t *a_mdc, const char *key, const char *value);
char *zlog_mdc_get(zlog_mdc_t *a_mdc, const char *key);
void zlog_mdc_remove(zlog_mdc_t *a_mdc, const char *key); typedef struct zlog_mdc_kv_s{
char key[MAXLEN_PATH + ];
char value[MAXLEN_PATH + ];
size_t value_len;
}zlog_mdc_kv_t; zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t *a_mdc, const char *key); #endif
mdc.c
/**
* 文件作用
*/ #include <stdlib.h>
#include <stdio.h>
#include <errno.h> #include "mdc.h"
#include "zc_defs.h" void zlog_mdc_profile(zlog_mdc_t *a_mdc, int flag){
zc_assert(a_mdc,); zc_hashtable_entry_t *a_entry;
zlog_mdc_kv_t *a_mdc_kv; zc_hashtable_foreach(a_mdc->tab, a_entry){
a_mdc_kv = a_entry->value;
zc_profile(flag, "---mdc_kv[%p][%s]-[%s]---",
a_mdc_kv,
a_mdc_kv->key,
a_mdc_kv->value
);
}
return;
} //-------------------------------------------------------------------------
void zlog_mdc_del(zlog_mdc_t *a_mdc){
zc_assert(a_mdc,);
if(a_mdc->tab){
zc_hashtable_del(a_mdc->tab);
}
free(a_mdc);
zc_debug("zlog_mdc_del[%p]", a_mdc);
return;
} static void zlog_mdc_kv_del(zlog_mdc_kv_t *a_mdc_kv){
free(a_mdc_kv);
zc_debug("zlog_mdc_kv_del[%p]", a_mdc_kv);
return;
} /**
* struct zlog_mdc_kv_s{
* char key[MAXLEN_PATH + 1];
* char value[MAXLEN_PATH + 1];
* size_t value_len;
* }
*/
static zlog_mdc_kv_t *zlog_mdc_kv_new(const char *key, const char *value){
zlog_mdc_kv_t *a_mdc_kv; a_mdc_kv = (zlog_mdc_kv_t *)calloc(, sizeof(zlog_mdc_kv_t));
if(!a_mdc_kv){
zc_error("calloc fail, errno[%d]", errno);
return NULL;
} snprintf(a_mdc_kv->key, sizeof(a_mdc_kv->key), "%s", key);
a_mdc_kv->value_len = snprintf(a_mdc_kv->value, sizeof(a_mdc_kv->value), "%s", value);
return a_mdc_kv;
} /**
* struct zlog_mdc_s{
* zc_hashtable_t *tab;
* }
*/
zlog_mdc_t *zlog_mdc_new(void){
zlog_mdc_t *a_mdc; a_mdc = calloc(, sizeof(zlog_mdc_t));
if(!a_mdc){
zc_error("calloc fail, errno[%d]", errno);
return NULL;
} a_mdc->tab = zc_hashtable_new(
,
zc_hashtable_str_hash,
zc_hashtable_str_equal,
NULL,
(zc_hashtable_del_fn) zlog_mdc_kv_del
);
if(!a_mdc->tab){
zc_error("zc_hashtable_new_fail");
goto err;
} return a_mdc;
err:
zlog_mdc_del(a_mdc);
return NULL;
} int zlog_mdc_put(zlog_mdc_t *a_mdc, const char *key, const char *value){
zlog_mdc_kv_t *a_mdc_kv; a_mdc_kv = zlog_mdc_kv_new(key, value);
if(!a_mdc_kv){
zc_error("zlog_new_kv_new failed");
return -;
} if(zc_hashtable_put(a_mdc->tab, a_mdc_kv->key, a_mdc_kv)){
zc_error("zc_hashtable_put fail");
zlog_mdc_kv_del(a_mdc_kv);
return -;
} return ;
} char *zlog_mdc_get(zlog_mdc_t *a_mdc, const char *key){
zlog_mdc_kv_t *a_mdc_kv; a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
if(!a_mdc_kv){
zc_error("zc_hashtable_get fail");
return NULL;
}else{
return a_mdc_kv->value;
}
} zlog_mdc_kv_t *zlog_mdc_get_kv(zlog_mdc_t *a_mdc, const char *key){
zlog_mdc_kv_t *a_mdc_kv; a_mdc_kv = zc_hashtable_get(a_mdc->tab, key);
if(!a_mdc_kv){
zc_error("zc_hashtable_get fail");
return NULL;
}else{
return a_mdc_kv;
}
} void zlog_mdc_remove(zlog_mdc_t *a_mdc, const char *key){
zc_hashtable_remove(a_mdc->tab, key);
return;
} void zlog_mdc_clean(zlog_mdc_t *a_mdc){
zc_hashtable_clean(a_mdc->tab);
return;
}
test_mdc.c
#include <stdio.h>
#include <string.h>
#include <time.h> #include "zc_defs.h"
#include "zc_hashtable.h"
#include "mdc.h" #include "zc_profile.c" #include "mdc.c"
#include "zc_hashtable.c" int main(){
zlog_mdc_t *a_mdc;
a_mdc = zlog_mdc_new();
if(!a_mdc){
fprintf(stderr, "%s", "zlog_mdc_new fail");
return -;
} zlog_mdc_put(a_mdc, "name", "jimmy");
char *name = zlog_mdc_get(a_mdc, "name");
printf("name = %s\n", name); time_t tt;
struct tm timer;
char time_str[];
time(&tt);
localtime_r(&tt, &timer);
strftime(time_str, , "%Y-%m-%d %H:%M:%S", &timer);
zlog_mdc_put(a_mdc, "time", time_str);
char *ps = zlog_mdc_get(a_mdc, "time");
printf("time = %s\n", ps); zlog_mdc_profile(a_mdc, ZC_DEBUG);
zlog_mdc_clean(a_mdc);
zlog_mdc_profile(a_mdc, ZC_DEBUG); zlog_mdc_del(a_mdc);
}
zlog学习笔记(mdc)的更多相关文章
- zlog学习笔记(level_list)
level_list.h /** * */ #ifndef __zlog_level_list_h #define __zlog_level_list_h zc_arraylist_t *zlog_l ...
- zlog学习笔记(level)
level.h /** * */ #ifndef __zlog_level_h #define __zlog_level_h #include "stdio.h" #include ...
- zlog学习笔记(zc_hashtable)
zc_hashtable.h /** * hashtable */ #ifndef __zc_hashtable_h #define __zc_hashtable_h typedef struct z ...
- zlog学习笔记(zc_arraylist)
zc_arraylist.h /** * 实现类似列表的功能 * */ #ifndef __zc_arraylist_h #define __zc_arraylist_h #define ARRAY_ ...
- zlog学习笔记(zc_profile)
zc_profile.h #ifndef __zlog_profile_h #define __zlog_profile_h #define EMPTY() #define zc_assert(exp ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- 【Visual C++】游戏编程学习笔记之四:透明动画实现
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44224963 作者:ZeeCod ...
- 【Visual C++】游戏编程学习笔记之三:游戏循环的使用
本系列文章由@二货梦想家张程 所写,转载请注明出处. 本文章链接:http://blog.csdn.net/terence1212/article/details/44208419 作者:Zee ...
- 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)
本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder 微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...
随机推荐
- Object-c字符串操作
字符串操作: -(void) testString{ NSString *str1 = @"some string"; NSLog(@"%@", str1); ...
- jax-rs中的一些参数标注简介(@PathParam,@QueryParam,@MatrixParam,@HeaderParam,@FormParam,@CookieParam)
先复习一下url的组成: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] jax-rs anotation @Path ...
- NSFileHandle
/* 文件处理句柄要完成的工作: 相当于C中的文件操作,诸如 打开,读,写,关闭,修改文件偏移量等行为 类名: NSFileHandle 注意: 操作句柄时,重点把握文件的偏移量在哪个位置 重点 ...
- mac PHP配置
apache默认路径配置方法 apache的配置 apache已经自带了,只需如下三个命令就可以了. 开启apache服务 sudo apachectl start 停止apache服务 sudo ...
- 关于PHP的curl开启问题
今天在做一个新浪登录功能,新浪提供的PHP SDK里需要用到curl_init()函数,在调试的时候报找不到curl_init()的方法. 经搜索得知需要开启curl的php扩展,那curl又是什么呢 ...
- linux下安装jdk+tomcat+eclipse+mysql
我的环境:主机是win7的,虚拟机是VWare Workstation 6.0 ,linux系统为Red Hat Enterprise Linux 5 64位 各软件版本:jdk是jdk-6u ...
- chrome插件——Vimium 键盘手福利
chrome插件——Vimium 键盘手福利 金刚 chrome chrome插件 Vimium 一直希望纯键盘操作,但是在浏览网页的时候,发现还是很难做到这点的.因为网页浏览的时候会有 各种各样的内 ...
- 什么是ODBO---OLE DB for OLAP
我怎么一步一步追到ODBO了? mondrian核心api->olap4j->jedox也在用olap4j->ODBO? ODBO是什么呢? OLE DB for OLAP ...
- MongoDB 常用故障排查工具
1.profile profiling levels: 0,关闭profile:1,只抓取slow查询:2,抓取所有数据. 启动profile并且设置Profile级别: 可以通过mongo shel ...
- CSRF攻击与防御
CSRF是什么 CSRF在百度百科中是这么说的:“CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session ridin ...