libconfig第二篇----两个小例子

linux下libconfig的使用 一、libconfig是什么? Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg . 它比xml可读性更好,而且更简洁。而且不像xml,它是type-aware类型自我感知的,因此不需要做string parsing (分词?). 而ini太弱。 2 配置文件说明(摘自手册翻译) libconfig支持结构化、层次化的配置。这些配置可以从文件中读取或写入文件,也可以在内存中操作。 一个配置由一组setting构成,setting由名字(name)关联,并有相应. 阅读详情

本文只看粗体即可,太多catch语句。两个例子均来自libconfig包的example文件夹下面,.

例子一:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <libconfig.h++>
using namespace std;
using namespace libconfig;
// This example reads the configuration file 'example.cfg' and display some of its contents.

int main(int argc, char **argv)
{
  Config cfg;

  try
  {
    cfg.readFile("example.cfg"); //读配置文件
  }
  catch(const FileIOException &fioex)
  {
    std::cerr << "I/O error while reading file." << std::endl;
    return(EXIT_FAILURE);
  }
  catch(const ParseException &pex)
  {
    std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()
              << " - " << pex.getError() << std::endl;
    return(EXIT_FAILURE);
  }


  // Get the store name.
  try
  {
    string name = cfg.lookup("name"); // 查询某个路径“name”,得到setting,存储到name
    cout << "Store name: " << name << endl << endl;
  }
  catch(const SettingNotFoundException &nfex)
  {
    cerr << "No 'name' setting in configuration file." << endl;
  }

  const Setting& root = cfg.getRoot();//得到根setting
 // Output a list of all books in the inventory.
  try
  {
    const Setting &books = root["inventory"]["books"];
    int count = books.getLength();   //得到某个setting的长度,从而循环读取

    
   for(int i = 0; i < count; ++i)
    {
      const Setting &book = books[i];
      // Only output the record if all of the expected fields are present.
      string title, author;
      double price;
      int qty;
      if(!(book.lookupValue("title", title)  //查询名字为title的setting存储到title中
           && book.lookupValue("author", author)
           && book.lookupValue("price", price)
           && book.lookupValue("qty", qty)))
        continue;

      cout << setw(30) << left << title << "  "
           << setw(30) << left << author << "  "
           << '$' << setw(6) << right << price << "  "
           << qty
           << endl;
    }
    cout << endl;
  }
  catch(const SettingNotFoundException &nfex)
  {
    // Ignore.
  }
  return(EXIT_SUCCESS);
}


// eof

例子二

头文件省略

// This example reads the configuration file 'example.cfg', adds a new
// movie record to the movies list, and writes the updated configuration to
// 'updated.cfg'.

int main(int argc, char **argv)
{
  static const char *output_file = "updated.cfg";

  Config cfg;
  // Read the file. If there is an error, report it and exit.
  try
  {
    cfg.readFile("example.cfg"); //读配置文件
  }
  catch(const FileIOException &fioex)
  {
    std::cerr << "I/O error while reading file." << std::endl;
    return(EXIT_FAILURE);
  }
  catch(const ParseException &pex)
  {
    std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine()
              << " - " << pex.getError() << std::endl;
    return(EXIT_FAILURE);
  }


// Get the store name.
  try
  {
    string name = cfg.lookup("name");    //通过"name"这个路径查找 到某个setting(名字为 name) 存储到string name 中
    cout << "Store name: " << name << endl << endl;
  }
  catch(const SettingNotFoundException &nfex)
  {
    cerr << "No 'name' setting in configuration file." << endl;
  }


  // Find the 'movies' setting. Add intermediate settings if they don't yet
  // exist.
  Setting &root = cfg.getRoot(); //返回root setting
  if(! root.exists("inventory"))
    root.add("inventory", Setting::TypeGroup);
  Setting &inventory = root["inventory"];
  if(! inventory.exists("movies"))
    inventory.add("movies", Setting::TypeList);
  Setting &movies = inventory["movies"];


  // Create the new movie entry.
  Setting &movie = movies.add(Setting::TypeGroup); //增加一个Setting::TypeGroup类型的子setting
  movie.add("title", Setting::TypeString) = "Buckaroo Banzai"; //增加一个子setting
  movie.add("media", Setting::TypeString) = "DVD";
  movie.add("price", Setting::TypeFloat) = 12.99;
  movie.add("qty", Setting::TypeInt) = 20;

  // Write out the updated configuration.
  try
  {
    cfg.writeFile(output_file); //把配置写到一个文件中
    cerr << "Updated configuration successfully written to: " << output_file
         << endl;
  }
  catch(const FileIOException &fioex)
  {
    cerr << "I/O error while writing file: " << output_file << endl;
    return(EXIT_FAILURE);
  }
  return(EXIT_SUCCESS);
}

// eof

配置文件:

example.cfg:

// An example configuration file that stores information about a store.

// Basic store information:
name = "Books, Movies & More";


// Store inventory:
inventory =
{
  books = ( { title  = "Treasure Island";
              author = "Robert Louis Stevenson";
              price  = 29.99;
              qty    = 5; },
            { title  = "Snow Crash";
              author = "Neal Stephenson";
              price  = 9.99;
              qty    = 8; }
          );


  movies = ( { title = "Brazil";
               media = "DVD";
               price = 19.99;
               qty = 11; },
             { title = "The City of Lost Children";
               media = "DVD";
               price = 18.99;
               qty = 5; },
             { title = "Memento";
               media = "Blu-Ray";
               price = 24.99;
               qty = 20;
             },
             { title = "Howard the Duck"; }
           );
};


// Store hours:
hours =
{
  mon = { open =  9; close = 18; };
  tue = { open =  9; close = 18; };
  wed = { open =  9; close = 18; };
  thu = { open =  9; close = 18; };
  fri = { open =  9; close = 20; };
  sat = { open =  9; close = 20; };
  sun = { open = 11; close = 16; };
};

libConfig++-开源 libConfig++ 是一个可移植且灵活的 C++ 库,用于读取以 C 风格语法编写的配置文件。 立即下载

相关推荐

c#毕业设计源码下载-libconfig:C/C++库,用于处理配置文件

c#毕业设计源码下载 libconfig C/C++ library for processing structured configuration files. Visit the for distribution tarballs and other info.

libconfig C++ 学习笔记

1. C++API 头文件 #include <libconfig.h++> ,命名空间:using namespace libconfig; 2.多线程使用问题:   (1)libconfig是完全可重入的,库中函数不使用全局变量和不保持成功调用间的状态。所以两个独立配置文件在两个不同线程间并发操作可以是安全的;   (2)libconfig是线程不安全,libconfig不考...

weixin_30287169的博客 428

libconfig 配置文件使用示例程序

配置文件很重要,INI 太弱,XML 太繁复,Linux *.conf 很酷。 找了好几种相关的类库,发觉还是 hyperrealm libconfig 最强大最好用,相关细节可参考 官方手册。 源中的版本是 1.3.2-1,也可以去官方文章下载最新版本。 $ sudo apt-get install libconfig8 libconfig8-dev 源码安装 : 去 https://hyperrealm.github.io/libconfig/ 下载  ./config make sudo make install 使用说明 c程序  头文件libconfig.h c++程序 所需头文件libconfig.h++,编译时需要链接动态库libconfig++

史上最全libconfig用法及配置详解

一、libconfig是什么 Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg. 它比xml可读性更好,而且更简洁。而且不像xml,它是type-aware类型自我感知的,因此不需要做string parsing 。 Libconfig 是用于读取、操作和写入结构化配置文件的库。 该库具有完全可重入的解析器,并包括 C 和 C++ 编程语言的绑定。该库可在现代 POSIX 兼容系统上运行,例如 Linux、Sol...

weixin_39573145的博客 9768

libconfig-1.7.2.tar.gz

Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg . 它比xml可读性更好,而且更简洁

ESP32 Arduino 学习篇(五)TFT_eSPI库

该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调。首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。初始化屏幕, 如果是ST7735,可以往里面传一个参数, 具体用到时再看。缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算。特别注意: 字库7是仿7段数码屏的样式。

DOF526570的博客 2万+

C/C++ 读取配置(config)文件 开源库(libconfig)

1.官网:https://hyperrealm.github.io/libconfig/ 2.github:https://github.com/hyperrealm/libconfig 3.安装: cd到解压文件目录,依次运行如下命令 ./configure make (运行完生成 .so 和 .a) make check make install...

Do 1万+

手把手教你用示波器测试DDR5 DRAM信号完整性(附眼图分析技巧)

本文详细介绍了如何使用示波器测试DDR5 DRAM信号完整性,包括眼图分析技巧。从DDR5的核心挑战、测试设备选型到实测工作流程,提供了全面的指导。特别强调了DFE功能验证和系统级协同测试,帮助工程师解决信号完整性问题,提升测试效率。

g2h3i4j5的博客 1149

C++开源库(一) ----libConfig详解

  博主天生患有蛋疼疾病,写博不易,转载注明出处http://www.cnblogs.com/liboBlog/,谢谢!   在写程序的时候必不可少的一个部分就是conf文件的解析,但是如果自己解析的话会比较繁琐,因为需要注意的事项实在是太多,比如:此conf文件中是否include其他文件;或者是在nginx中存在很多key相同的项目,我们应该如何解析;不同的文件类型解析方式不同等等...

didie2465的博客 1916

MEME-CHIP实战:5步搞定ChIP-seq数据中的motif发现与可视化

本文提供了使用MEME-CHIP工具进行ChIP-seq数据motif发现与可视化的完整实战指南。通过5个清晰步骤,从数据准备、环境搭建、命令行执行到结果解读与高级可视化,详细讲解了如何利用MEME-CHIP工作流高效完成从原始peak序列到发表级motif图的分析,并分享了关键的参数调优与避坑经验。

alice7model的博客 508

量子密钥分发系统的工程实践(四):FPGA在后处理中的核心实现与优化

本文深入探讨了FPGA在量子密钥分发(QKD)系统后处理中的核心实现与优化策略。文章详细拆解了FPGA如何高效完成原始密钥提取、误码协商和私密放大等关键任务,并分享了流水线设计、资源复用及存储器架构优化等工程实践“心法”,旨在解决高速、实时QKD系统中的性能瓶颈,提升密钥生成率。

t8u9v0的博客 387

Windows 10及Visual Studio 2015下安裝libconfig

筆者一開始打算在Windows 10下安裝官方的libconfig,並搭配Visual Studio 2015使用。但是因為官方的教程在這方面並沒有太多著墨,筆者自己踩了坑後(詳見Unable to compile on Windows 10),決定轉而使用vcpkg來安裝。

keineahnung2345的博客 1551

Excel曲线拟合实战:从基础趋势线到高级回归分析

本文系统介绍了Excel曲线拟合的完整工作流,从基础的散点图与趋势线应用,到利用Solver插件进行自定义高级回归分析。文章详细讲解了线性、多项式、指数、对数等六大常用数学模型的适用场景与选择方法,并强调了通过R²值、残差图评估拟合效果、避免过拟合与外推风险的关键步骤,帮助读者掌握从数据探索到预测评估的实战技能。

weixin_29280219的博客 532

libconfig安装及配置文件简单示例

1.下载 libconfig下载地址 2.安装 安装包:libconfig-1.7.2.tar.gz 安装过程:解压,配置,编译,安装 //解压安装包 tar -zxvf libconfig-1.7.2.tar.gz //安装前的引导配置,默认安装到/usr/local,可以通过./configure --prefix=PREFIX进行修改,也可以修改脚本参数ac_default_prefix的...

blog 4701

【PINN高级教程】范式融合与前沿应用 第5讲:贝叶斯推断与生成式建模的深度融合

正规化流(Normalizing Flow, NF)通过一系列可逆变换把简单分布映射为复杂后验,从而获得更好的表达能力。算子学习保持映射的物理正确性。贝叶斯推断给出了自然的框架,但直接对高维函数空间做采样(如 MCMC)几乎不可行。1️⃣ 在自己的 PDE 上跑一遍完整的 Bayesian PINN 流模型。的学习机制深度融合,以在保持物理一致性的前提下,高效地从后验分布中采样。2️⃣ 将每个 θ 直接映射到 FNO 权重,得到不同解的采样。的后验 p(θ∣x,y)p(θ∣x,y) 进行近似。

u012133341的博客 474

【Clickhouse】Clickhouse写入报错keeper server rejected the connection during the handshake

我的clickhouse集群时不时的报这个错误All connection tries failed while connecting to ZooKeeper. nodes: xxx 到时写入数据失败 用的ck自带的keeper。你需要仔细检查ZooKeeper集群的配置和状态,确保所有节点都正常运行,并且能够正确地选举领导者。检查ZooKeeper的ACL以及ClickHouse连接所使用的凭据,确保它们被正确配置和授权。版本不兼容:有时,不同版本的软件之间可能存在不兼容性,导致连接问题。

九师兄 370

libconfig第一篇———使用指南

官网:http://www.hyperrealm.com/libconfig/ 1 libconfig是什么? Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg . 它比xml可读性更好,而且更简洁。而且不像xml,它是 type-aware类型自我感知的,因此不需要做string parsing (分词?). 而ini太弱。 2

crazyhacking的专栏 2万+

华为流程L1-L6业务流程深度细化到可执行【附全文阅读】

该文档主要介绍了华为业务流程的深度细化及相关内容,包括流程框架、建模方法、流程模块描述、流程图建模等,旨在帮助企业构建有效的流程体系,实现战略目标。

cdfunlove的博客 4001

Libconfig

一:什么是Libconfig? 程序开发过程中往往很多参数需要放在配置文件中,因为这样可以避免更改代码重新编译的问题。 通常我们可以通过自己读init文件来实现,不过已经有很多人做了这方面的东西,可以借用,Libconfig就是其中之一。 Libconfig是用来读写,控制配置文件的一个库,目前支持C和C++两种语言,方便好用,可以一试。 二:怎么使用? 1. 下载 http:

newand 2712

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

libconfig c语言实例

在工作项目中,使用到了配置文件导入导出等功能(否则程序就不是可配置的),所以就需要合理选择配置文件得读写操作,libconfig就是这么样一个东西。 Libconfig是一个结构化的配置文件库,它可以定义一些配置文件,例如test.cfg . 它比xml可读性更好,而且更简洁。libconfig主要是通过路径读取对应的 .cfg文件来获取其中的内容,不必要去解析字符串等内容,直接通过函数获取数据,...

weixin_43608153的博客 3196

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

libconfig 例子

本文只看粗体即可,太多catch语句。两个例子均来自libconfig包的example文件夹下面,. 例子一: #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #include &lt;libconfig.h++&gt; using n...

arrogant_boom的博客 1093

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ubuntu下安装libconfig++

关于 #include "libconfig.h++"出错,找不到libconfig.h++文件。 尝试安装: centos: yum install libconfig libconfig-devel ubuntu: sudo apt-get install libconfig libconfig++-dev libconfig-dev -y 若安装失败,则需源码安装: https://hyperrealm.github.io/libconfig/ 页面最下面下载 .tar.gz文件。

alex1801 3367

用libconfig读取配置文件

Table of Contents demo1 配置文件libconfigdemo.cfg 读取代码config_read_file.c 结果: demo2 头文件EmbGW.h 配置文件default.cfg 源代码config.c 编译运行 demo1 配置文件libconfigdemo.cfg # authenticator name = "JP"; en...

RToax 2811

libconfig初识

文章目录一、是什么二、为什么需要三、使用说明3.1功能说明3.2配置文件构成3.2C++版本常见API接口说明 一、是什么 是一个解析配置文件的C/C++库 二、为什么需要 通常业务代码的代码量是非常大的,如果没有配置文件,那么所有的东西都是写死的,在后续的维护过程之中,进行修改就是非常麻烦的一件事 如果有配置文件,我们可以通过读取配置文件来完成某些动作,这样就提高了代码的可迭代和可维护性 libconfig就是提供操控配置文件的一个库。如果我们不适用库来对配置文件进行读取,那么是非常麻烦的一件事。比

ych9527的博客 1636

error:#include "libconfig.h++"出错,找不到libconfig.h++文件

关于 #include "libconfig.h++"出错,找不到libconfig.h++文件 网上遇到两个提这样问题的人,网址如下: 1,https://groups.google.com/forum/?fromgroups=#!topic/ldc-dev/9ED-0UP_mvA  没有得到有效的解决方法 2,http://camstudio.org/forum/discuss

hamigua_12的专栏 3760
上一篇: libconfig第一篇———使用指南
下一篇: C++异常(exception)第一篇--综合讲解
crazyhacking
博客等级 码龄15年 299粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值