libconfig 写文件
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、写INT类型
二、写STRING字符型
三、写ARRAY
四、写GROUP
五、写LIST
六、完整代码演示
七、写入文件示例
前言
libconfig
是一个用于读写结构化配置文件的库。
libconfig写入文件的类型有8种,如下:
#define CONFIG_TYPE_GROUP 1
#define CONFIG_TYPE_INT 2
#define CONFIG_TYPE_INT64 3
#define CONFIG_TYPE_FLOAT 4
#define CONFIG_TYPE_STRING 5
#define CONFIG_TYPE_BOOL 6
#define CONFIG_TYPE_ARRAY 7
#define CONFIG_TYPE_LIST 8
这里暂时具体演示INT、STRING、ARRAY、LIST、GROUP五种,其他类似就不多说。
官网:https://hyperrealm.github.io/libconfig/
提示:以下是本篇文章正文内容,下面案例可供参考
一、写INT类型
config_setting_t* timeout_ = config_setting_add(root, "timeout", CONFIG_TYPE_INT);config_setting_set_int(timeout_, 5);
二、写STRING字符型
config_setting_t* log_path_ = config_setting_add(root, "log_path", CONFIG_TYPE_STRING);config_setting_set_string(log_path_, "2222");
三、写ARRAY
config_setting_t* array_ = config_setting_add(root, "numbers", CONFIG_TYPE_ARRAY);for (int i = 0; i < 10; ++i){config_setting_t* setting = config_setting_add(array_, NULL, CONFIG_TYPE_INT);config_setting_set_int(setting, 10 * i);}
四、写GROUP
config_setting_t* Test_ = config_setting_add(root, "Test", CONFIG_TYPE_GROUP);config_setting_t* ip_ = config_setting_add(Test_, "Test1", CONFIG_TYPE_STRING);config_setting_set_string(ip_, "2222");config_setting_t* prot_ = config_setting_add(Test_, "Test2", CONFIG_TYPE_INT);config_setting_set_int(prot_, 8001);
五、写LIST
config_setting_t* network = config_setting_add(root, "network", CONFIG_TYPE_LIST);for (int i = 0; i < 3; i++) {config_setting_t* networkindex = config_setting_add(network, "", CONFIG_TYPE_GROUP);config_setting_t* ip_ = config_setting_add(networkindex, "ip", CONFIG_TYPE_STRING);config_setting_set_string(ip_, "2222");config_setting_t* prot_ = config_setting_add(networkindex, "port", CONFIG_TYPE_INT);config_setting_set_int(prot_, 8001);}
六、完整代码演示
config_t cfg;config_init(&cfg); config_setting_t* root = config_root_setting(&cfg);config_setting_t* timeout_ = config_setting_add(root, "timeout", CONFIG_TYPE_INT);config_setting_set_int(timeout_, 5);config_setting_t* log_path_ = config_setting_add(root, "log_path", CONFIG_TYPE_STRING);config_setting_set_string(log_path_, "2222");config_setting_t* network = config_setting_add(root, "network", CONFIG_TYPE_LIST);for (int i = 0; i < 3; i++) {config_setting_t* networkindex = config_setting_add(network, "", CONFIG_TYPE_GROUP);config_setting_t* ip_ = config_setting_add(networkindex, "ip", CONFIG_TYPE_STRING);config_setting_set_string(ip_, "2222");config_setting_t* prot_ = config_setting_add(networkindex, "port", CONFIG_TYPE_INT);config_setting_set_int(prot_, 8001);}config_setting_t* Test_ = config_setting_add(root, "Test", CONFIG_TYPE_GROUP);config_setting_t* ip_ = config_setting_add(Test_, "Test1", CONFIG_TYPE_STRING);config_setting_set_string(ip_, "2222");config_setting_t* prot_ = config_setting_add(Test_, "Test2", CONFIG_TYPE_INT);config_setting_set_int(prot_, 8001);config_setting_t* array_ = config_setting_add(root, "numbers", CONFIG_TYPE_ARRAY);for (int i = 0; i < 10; ++i){config_setting_t* setting = config_setting_add(array_, NULL, CONFIG_TYPE_INT);config_setting_set_int(setting, 10 * i);}int i, num = 10;config_setting_t* slist = NULL;config_setting_t* stmp = NULL;if (num) {slist = config_setting_add(root, "keyword", CONFIG_TYPE_LIST);for (i = 0; i < num; ++i) {stmp = config_setting_add(slist, NULL, CONFIG_TYPE_STRING);if (stmp) {config_setting_set_string(stmp, "666");}}}// 写入文件if (!config_write_file(&cfg, "settings.cfg")) { fprintf(stderr, "Error: %s\n", config_error_text(&cfg));}config_destroy(&cfg);
七、写入文件示例
timeout = 5;
log_path = "2222";
network = (
{
ip = "2222";
port = 8001;
},
{
ip = "2222";
port = 8001;
},
{
ip = "2222";
port = 8001;
} );
Test :
{
Test1 = "2222";
Test2 = 8001;
};
numbers = [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 ];
keyword = ( "666", "666", "666", "666", "666", "666", "666", "666", "666", "666" );