配置文件的讀取是程序中必要部分,雖然不算複雜,但若是每次都寫配置文件的分析提取代碼也是件煩人的事。如今流行的配置文件格式有:ini,xml ,簡單name-value對等格式,ACL庫中實現了最簡單的 name-value對格式的配置文件,該文件格式有點相似於 xinetd.conf 的格式,文件格式以下:app
test.cf:函數
service myapp {code
my_addr = 127.0.0.1xml
my_port = 80對象
my_list = www.test1.com, www.test2.com, www.test3.com, \內存
www.test4.com, www.test5.com, www.test6.com字符串
...get
}微博
其中的 "\" 是鏈接符,能夠把折行的數據鏈接起來。table
下面的例子讀取該配置文件並進行解析:
static int var_cfg_my_port; static ACL_CFG_INT_TABLE __conf_int_tab[] = { /* 配置項名稱, 配置項缺省值, 存儲配置項值的地址, 保留字, 保留字 */ { "my_port", 8080, &var_cfg_my_port, 0, 0 }, { 0, 0 , 0, 0, 0 } }; static char *var_cfg_my_addr; static char *var_cfg_my_list; static ACL_CFG_STR_TABLE __conf_str_tab[] = { /* 配置項名稱, 配置項缺省值, 存儲配置項值的地址 */ { "my_addr", "192.168.0.1", &var_cfg_my_addr }, { "my_list", "www.test.com", &var_cfg_my_list }, { 0, 0, 0 } }; static int var_cfg_my_check; static ACL_CFG_BOOL_TABLE __conf_bool_tab[] = { /* 配置項名稱, 配置項缺省值, 存儲配置項值的地址 */ { "my_check", 0, &var_cfg_my_check }, { 0, 0, 0 } }; void test(void) { ACL_XINETD_CFG_PARSER *cfg; // 配置解析對象 cfg = acl_xinetd_cfg_load("test.cf"); // 讀取並解析配置文件 acl_xinetd_params_int_table(cfg, __conf_int_tab); // 讀取全部 int 類型的配置項 acl_xinetd_params_str_table(cfg, __conf_str_tab); // 讀取全部字符串類型的配置項 acl_xinetd_params_bool_table(cfg, __conf_bool_tab); // 讀取全部 bool 型的配置項 acl_xinetd_cfg_free(cfg); // 釋放內存 }
經過調用 acl_xinetd_params_xxx_table() 函數,直接將配置項的值賦給變量,這樣省去了不少麻煩。