C/C++ 配置文件

42 views
Skip to first unread message

benegg

unread,
Sep 13, 2009, 11:53:08 AM9/13/09
to online_game_dev
几乎完整的程序或者软件, 都有配置信息, 一般保存在文件中. C/C++ 语言的项目一般使用 .ini 文件作为配置文件. ini 文件和成熟
的库供使用, 但缺点很明显, 很难表达父子关系, 因为配置信息应该是一根树 - 配置树.

著名的Web Server Lighttpd 使用 LEMON 来解析配置文件. 有些软件还使用 Lua/Python 等脚本语言来做配置管
理. 但很多时候没有这个必要. 配置信息只要是一根树即可.

基于这个考虑, 我开发了 C/C++ 的配置管理库, 可用来做程序/软件的配置模块.

*
语法定义:
o 空白字符为 '\t \r\n'(制表符, 空格, 回车, 换行)
o 忽略只包含空白字符的行
o 有效行以 '\t*' 开头
o 注释行以 '\t*#' 开头
o 有效行如果不是注释, 则必须是键值对配置行. key 和 value 之间用等号'='或者冒号':'分隔
o key 不包含任何空白字符, 两端的空白字符被忽略
o value 两端的空白字符被忽略
o 配置项可以有包含关系, 用一个 TAB 缩进表示父子关系
*
配置读取:
o 用键名获取子配置项
o 用斜杠'/'或者句号'.'分隔的配置项路径获取配置项
o 把配置项的值作为整形(int)返回
o 把配置项的值作为字符串(char *)返回

示例见: http://www.ideawu.net/person/config/

转自: http://www.benegg.com/?p=50

benegg

unread,
Sep 14, 2009, 12:25:14 AM9/14/09
to online_game_dev
配置文件示例:

# this is a comment

author : ideawu
url: http://www.ideawu.net

proxy :
php =
host = 127.0.0.1
port = 8088
py :
host = 127.0.0.1
port = 8080

cgi =
pl = /usr/bin/perl

benegg

unread,
Sep 22, 2009, 4:45:15 AM9/22/09
to online_game_dev
已经建立Google Code项目, 在: http://code.google.com/p/treeconf/

On Sep 13, 11:53 pm, benegg <ide...@163.com> wrote:

avalon

unread,
Sep 22, 2009, 4:58:34 AM9/22/09
to online_...@googlegroups.com

感觉基本上等价

======================


proxy :
php =
host = 127.0.0.1
port = 8088
py :
host = 127.0.0.1
port = 8080
cgi =
pl = /usr/bin/perl

===========================

[proxy]
php.host = 127....
php.port=.....
py.host = ...


===========================
[proxy]
....
[proxy.php]
host = xxx
port = xxx
....
[cgi]
....


benegg 写道:

benegg

unread,
Sep 22, 2009, 5:13:14 AM9/22/09
to online_game_dev
显然, 这不是"能"与"不能"的问题, 而是"直观"和"方便"的问题. 解决问题可能有很多种方法, 但总有一些比另一些更优.
Reply all
Reply to author
Forward
0 new messages