当前位置: 首页 > news >正文

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" );

相关文章:

  • 配置 RDP 远程桌面协议连接ubuntu服务器桌面
  • Redis是单线程的,如何提高多核CPU的利用率?
  • 大模型在直肠癌预测及治疗方案制定中的应用研究
  • Web4.0身份革命:去中心化身份系统的全栈实现路径
  • 开环增益?闭环增益?
  • 本土网盟推广孟加拉slot游戏出海营销优势
  • FWFT_FIFO和Standard_FIFO对比仿真
  • [OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash
  • 同一页面下动态加载内容的两种方式:AJAX与iframe
  • 解析excel中的图片
  • Git命令行中vim的操作
  • 【T-MRMSM】文本引导多层次交互多尺度空间记忆融合多模态情感分析
  • 【计算机网络】IP地址
  • PPO 强化学习机械臂 IK 训练过程可视化利器 Tensorboard
  • 【深度强化学习 DRL 快速实践】近端策略优化 (PPO)
  • 七、函数重载与默认参数(Function Overloading Default Arguments)
  • 【Agent】LangManus深度解析:AI自动化框架的对比与langgraph原理
  • 短视频矩阵系统可视化剪辑功能开发,支持OEM
  • ASP.NET Core 自动识别 appsettings.json的机制解析
  • 2025年的营销趋势-矩阵IP
  • 重新认识中国女性|婚姻,古代传统家庭再生产的根本之道
  • 单位被裁定补缴12年社保,滞纳金该谁出?
  • 一图读懂|上海海关公布一季度数据:钢材出口增长超143%
  • 潘功胜:一季度中国经济开局良好,金融市场展现出较强韧性
  • “谁羽争锋”全国新闻界羽毛球团体邀请赛在厦门开赛
  • 神舟二十号载人飞船与空间站组合体完成自主快速交会对接