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 ...
随机推荐
- IOS开发——01_第一个OC程序
本文目录 一.新建Xcode项目 二.运行项目 注:建议先学习C语言, 如果你还没有编程经验,看不懂的地方可以在评论区提出,本文使用的为Xcode6.1版本,与之前版本会有所差异,但总体不变. 另:还 ...
- mysql中数据类型的取值范围
mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...
- c#.net 使用NPOI导入导出标准Excel (asp.net winform csharp)
尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...
- Git笔记1
1.简介 1.1 GIT(分布式版本控制系统) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非 ...
- Jetty 发布web服务
Jetty provides a Web server and javax.servlet container, plus support for HTTP/2, WebSocket, OSGi, J ...
- 用了星型转换的sql跑了5小时--->5mins的过程
=================START================================ BI数据仓库环境里面跑着一个crontab job,一旦sql运行超过4hours,就会接 ...
- C# 多线程,论多核时代爱恨情仇
为什么要学习多线程? 2010年1月21日是10年某市公务员考试的报名截止日.因从下午2点开始,用于报名的北京市人事考试网瘫痪,原定于昨天下午5点截止的报名时间延迟至今天上午11点. 2011年3月1 ...
- java:comp/env/jdbc/ 的两种配置方法
1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> &l ...
- 【Unity】改变向量的方向而不改变其大小
最近在做一个打砖块游戏时遇到一个小问题,就是小球有可能会在左右两个边界之间做循环往返运动而导致游戏无法继续进行下去,于是我打算让小球在垂直撞向边界时改变一下方向,但是速度不变,尝试了一些方法但是没有达 ...
- oracle存储过程、函数、序列、包
一. 存储过程 1. 语法 create or replace procedure procedureName(seqName varchar2) is /*声明变量*/ n ); cursor cu ...