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 ...
随机推荐
- 115个Java面试题和答案——终极列表(下)
第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...
- MonoDevelop编辑器中文乱码解决
说解决乱码分几步,总共分三部! 1. Tools -> Options 2. 3.点击Font->点击TextEditor会出现下边选框,选取喜欢风格并且不乱码即可.
- IOS开发之Bug--关于C语言数组的容量参数
这个错误之前没遇过,蛮奇葩的错误,只是一开始不了解,因为它折腾了许久. 先简单概括一下,以后有时间整理一下: 对应创建C语言的byte数组,我一开始使用:Byte b[PROTOCOL_CACHE_B ...
- linux下安装opcache扩展
linux下安装opcache扩展 参考:http://www.php.net/manual/zh/opcache.installation.php 1 2 3 4 5 6 7 wget http ...
- C#复习⑨(附带C#参考答案仅限参考)
C#复习⑨ 2016年6月22日 14:28 C#考试题&参考答案:http://pan.baidu.com/s/1sld4K13 Main XML Comments & Pointe ...
- Enabling Cross-Origin Requests in ASP.NET Web API 2
Introduction This tutorial demonstrates CORS support in ASP.NET Web API. We’ll start by creating two ...
- C# 重载运算符
如果你想让自己定义的类型可以用运算符进行运算,那么可以通过重载运算符来实现: 示例: class Salary { public int RMB { get; set; } public static ...
- IIS7配置PHP图解(转)
IIS7+PHP_5.2.17 于之前安装IIS的时候已经选上了isapi扩展和isapi筛选,这里就不用另外再添加角色服务了,直接开始 先修改php.ini文件.. 把c:\php下的php.ini ...
- 烂泥:高负载均衡学习haproxy之安装与配置
本文由秀依林枫提供友情赞助,首发于烂泥行天下 有关高负载均衡的软件,目前使用比较多的是haproxy.nginx和lvs.下面我们就开始学习haprxoy这款软件. 一.haproxy介绍 以下开始介 ...
- 初识JNI
需要用到NDK Android 平台从诞生起,就已经支持 C.C++开发.众所周知,Android 的 SDK 基于 Java 实现,这意味着基于 Android SDK 进行开发的第三方应用都必须使 ...