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 ...
随机推荐
- 操作系统开发系列—12.f.在内核中添加中断处理 ●
因为CPU只有一个,同一时刻要么是客户进程在运行,要么是操作系统在运行,如果实现进程,需要一种控制权转换机制,这种机制便是中断. 要做的工作有两项:设置8259A和建立IDT. /*========= ...
- iOS cookie问题
获取cookie时汉字应转换为UTF8格式
- iOS关于CoreAnimation动画知识总结
一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...
- 手机影音1--SplashActivity
/** * 1.设置被启动的Activity为单例模式 */ public class SplashActivity extends Activity { /** * 是否已经启动主页面 */ pri ...
- iOS如何获取网络图片(三)有沙盒的
沙盒 沙盒简介 默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件 Documents:苹果建议将程序中建立的或在程 ...
- c中的指针
一. 指针前奏 1. 指针的重要性 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很好,那你干脆说没学过C语言. 2. 小需求 l void change(int n)函数 ...
- OC 入门
OC 入门 关键词正确写法: Xcode 错误的写法: xcode iPhone 错误的写法:IPhone iOS 错误的写法:IOS OC 全称: Objective-C 错误的写法:Object- ...
- 学习Coding-iOS开源项目日志(三)
继续前两篇,接着本第三篇<学习Coding-iOS开源项目日志(三)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的 ...
- Oracle global database name与db link的纠缠关系
ORACLE数据库中Global Database Name与DB LINKS的关系还真是有点纠缠不清,在说清楚这个关系前,我们先来了解一下Global Database Name的概念 Global ...
- mysql技巧之select count的比较
在工作过程中,时不时会有开发咨询几种select count()的区别,我总会告诉他们使用select count(*) 就好.下文我会展示几种sql的执行计划来说明为啥是这样. 1.测试 ...