C语言与Python, Lua, PHP等语言的接口 用脚本语言开发网游 - C整合Python
Sep 10

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

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

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

  • 语法定义:

    • 空白字符为 '\t \r\n'(制表符, 空格, 回车, 换行)
    • 忽略只包含空白字符的行
    • 有效行以 '\t*' 开头
    • 注释行以 '\t*#' 开头
    • 有效行如果不是注释, 则必须是键值对配置行. key 和 value 之间用等号'='或者冒号':'分隔
    • key 不包含任何空白字符, 两端的空白字符被忽略
    • value 两端的空白字符被忽略
    • 配置项可以有包含关系, 用一个 TAB 缩进表示父子关系
  • 配置读取:

    • 用键名获取子配置项
    • 用斜杠'/'或者句号'.'分隔的配置项路径获取配置项
    • 把配置项的值作为整形(int)返回
    • 把配置项的值作为字符串(char *)返回

配置文件示例:

# 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

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

Written by benegg at 2009-09-10 22:09:50 | Views: 2515


3 Responses to “类Python语法的C/C++配置文件库”

  1. 1. 金庆 Says:

    用"."号表示层次也挺清楚的。
    proxy.php.host=1.1.2.3
    proxy.php.port=1234
    log4cxx的配置文件就是这种。
    最正统的还是xml.

  2. 2. benegg Says:

    回复金庆:
    用"."号表示层次, 确实可以. 但是, 它并不能直观地表示树, 而是直观地告诉你:"用点号表示树冗余度很高, 而且不直观!".

  3. 3. chris Says:

    为什么不用XML来做配置文件呢

Pages:

Leave a Reply

必须登录, 或者浏览器开启JavaScript支持才可以评论!