curl_loader 系列1
来源:互联网 发布:淘宝店铺信用怎么看 编辑:程序博客网 时间:2024/05/18 00:07
如何实现从配置文件到内存数据结构的映射
1. 先把文件内容读到内存中
while( fgets(fgets_buf,sizeof(fgets_buff)-1,fp))
2. 对每一行进行处理
当碰到“#”就跳过这一行,if(fgets_buff[0]=="#") continue;
去掉每一行前面的空格,或者TAB
如何判断:static int is_ws(char * const ptr)
{
return (*ptr==' '||*ptr=='\r'||*ptr=='\t'||*ptr=='\n')?1:0;
}
删除其空格等字符: char * eat_ws(char* ptr,size_t * const len)
{
if(!ptr||!*len)
return NULL;
while(*len&&is_ws(ptr))
++ptr,--(*len);
return *len?ptr:NULL;
}
3. 根据配置文件的格式 TAG=VALUE
因此可以通过“=”把这个记录中的TAG和VALUE分开
equal=strchr(str_buff,'=');
equal='\0';
因此TAG=str_buf, VALUE=equal+1;
4. 构造一个映射表 格式如下: TAG->fparse
typedef int (*fparser)(batch_context * const bctx,char * const value)
typedef struct tag_parser_pair
{
char *tag;
fparser parser;
} tag_parser_pair 建立一个能将解析函数和标记关联起来的数据结构
static const tag_parser_pair tp_map[]
{
{"batch_name", batch_name_parser},
{"client_num_max",client_num_max_parser},
……
} 建立一个map 表,把所有的TAG和fparser都罗列出来。
5. 找到对应str_buff的解析函数fpaser
for(index=0;tp_map[index].tag;index++)
{
if(!strcmp(tp_map[index].tag,tag))
return tp_map[index].parser;
}
6. 调用对应的解析函数fparser把VALUE写入到结构batch_context中对应的项中
(*parser)(&bctx_array[*batch_num],value)
不同的parser完成不同的功能,但是其接口是一样的,比如batch_name_parser就是把value写入到batch_context结构中的batch_name中
static int batch_name_parser(batch_context * const bctx, char* const value)
{
strncpy(bctx->batch_name,value,batch_name_size);
}
7. fclose(fp) 关闭该文件描述符
- curl_loader 系列1
- NetSNS二次开发系列1--文章系列简介
- MEF学习系列笔记系列(1)
- StrutsCatalog系列(1)--BaseAction
- struts2系列之1
- 考研系列1
- GeoRSS 学习系列(1)
- MACD系列1
- ORACLE 入门系列(1)
- Learning python 系列1
- ajax系列教程(1)
- Microwindow系列(1)--移植
- [SilkyBible] XviD系列-1
- XNA系列(1)
- s3c2440学习系列1
- BEA WebLogic系列[1]
- snmp系列1
- gtd工具软件系列1
- 用CryptoAPI进行数据加密
- HTTPService标签的使用
- jquery.pagination.js 实现无刷新分页
- 2011.10.18
- 【欣赏】logo设计原则 + 一组设计独特的logo欣赏
- curl_loader 系列1
- 指针数组 与数组指针
- C++基于虚函数的多态分析
- 用VC++6.0制作ASP服务器控件简介
- android 3.2 实现获取pin&puk次数,添加puk验证界面。
- 24点大全
- Oracle用户权限 -- 新建用户权限继承另一用户的权限
- PowerDesigner 模型文档 说明
- linux 命令英文全称