iniparser 使用方法介绍

一、iniparser的概述

INI(Initialization File)文件是一种简单直观的数据存储格式,常用于配置应用程序的初始化设置。这种文件通常包含若干个节(section)和键值对(key-value pairs)。INI文件的每一部分都是自描述性的,易于阅读和编辑,使得非程序员也能轻易理解并修改配置参数。
INI文件因其简单易用性而在许多编程语言中广泛应用,尤其是在Windows操作系统中,很多应用程序都采用INI文件作为配置文件。当然,随着XML、JSON等更丰富、更结构化的数据交换格式的普及,INI文件在现代应用程序中的使用相对减少,但在一些轻量级应用或对启动速度有较高要求的情况下,仍然是一种常见且实用的配置文件格式。

二、为什么要用iniparser

对于很多程序中要用的参数如果是可变的,那么最好的处理方式就是通过main函数参数传递,或者从别的地方去获取,这其中之一就是配置文件,但是在一个成熟和架构完善的系统,一般都会做到自动配置,自动部署,所以有的系统里会有一个单独的配置服务存在,每个其它的服务的配置信息从配置中心服务获取,然后运维人员通过操作界面把配置信息下发给配置中心服务,其余服务从配置中心获取变更信息。

三、下载库

库链接:

https://github.com/ndevilla/iniparser.git

四、常用API介绍

1、加载ini文件

/*
   *  @brief  从ini格式的配置文件中加载数据
   *  @param  [IN]  ininame  要打开的ini格式文件
   *  @return != NULL 返回一个指向dictionary结构的指针
   *  == NULL 加载ini文件失败
*/
dictionary * iniparser_load(const char *ininame);

2、获取键值

 /*

   *  @brief  获取指定键(key)对应的字符串类型的值
   *  @param  [IN]  d  dictionary结构的指针   
   *  @param  [IN]  key  要查找的键,通常格式为 "section:key",表示要获取哪个节(section)下的哪一项(key)的值。
   *  @param  [IN]  def  当键不存在或者其值不是字符串时的默认返回值。如果没有找到对应键,函数将返回此默认值。    
   *  @return 如果找到了相应的键,返回键值对应字符串
   *  如果没有找到匹配的键,返回def指定的字符串值
*/
const char * iniparser_getstring(const dictionary *d, const char *key, const char *def);

/*
  *  @brief  获取指定键(key)对应的整数值
  *  @param  [IN]  d  dictionary结构的指针   
  *  @param  [IN]  key  要查找的键,通常格式为 "section:key",表示要获取哪个节(section)下的哪一项(key)的值。
  *  @param  [IN]  notfound  当键不存在或者其值不能被转换为整数时,函数将返回这个默认值。   
  *  @return 如果找到了相应的键,并且其值可以被成功转换为整数,则返回该整数值。
  *  如果没有找到匹配的键,或者该键对应的值无法转换为整数,则返回 notfound 参数提供的默认值。
*/
int iniparser_getint(const dictionary * d, const char * key, int notfound);

/*
  *  @brief  获取指定键(key)对应的浮点型值
  *  @param  [IN]  d  dictionary结构的指针   
  *  @param  [IN]  key  要查找的键,通常格式为 "section:key",表示要获取哪个节(section)下的哪一项(key)的值。
  *  @param  [IN]  notfound  当键不存在或者其值无法转换为双精度浮点数时,函数返回的默认值。
  *  @return 如果找到了相应的键,并且其值能成功转换为一个双精度浮点数,则返回该浮点数。
  *  如果没有找到匹配的键,或者键的值不能被解释为一个有效的双精度浮点数,则返回 notfound 参数所提供的默认值。
*/
double iniparser_getdouble(const dictionary *d, const char *key, double notfound);
     

3、设置键值

 /*
  *  @brief  设置或修改 ini  配置文件中某个键值对
  *  @param  [IN]  d  dictionary结构的指针   
  *  @param  [IN]  entry  字符串形式的键值对标识符,格式通常是 "section:key",表明您要在哪个节(section)下的哪个键(key)上设置或修改值(val)。
  *  key值存在则修改对应val,key值不存在则会新增
  *  @param  [IN]  val: 要设置的新值,作为字符串传递。
  *  @return 返回0表示设置成功
*/
int iniparser_set(dictionary *ini, const char *entry, const char *val);

4、移除键值

/*
  *  @brief  移除 ini 配置文件中某个键值对
  *  @param  [IN]  d  dictionary结构的指针   
  *  @param  [IN]  entry  字符串形式的键名,包括可选的部分名称(section)和键(key)
  *  如果不指定key,则会移除整个section
*/
void iniparser_unset(ini, const char *entry);

5、 判断键是否存在

 /*
  *  @brief  判断 ini 配置文件是否存在某个键值
  *  @param  [IN]  d  dictionary结构的指针   
  *  @param  [IN]  entry  字符串形式的键值对标识符,格式通常是 "section:key"
  *  @return 返回1表示存在,返回0表示不存在
*/
int iniparser_find_entry(const dictionary *ini, const char *entry);

6、获取section个数

/*
  *  @brief  获取ini配置文件中section的数量
  *  @param  [IN]  d  dictionary结构的指针             
  *  @return 成功返回section个数,失败返回 -1
*/
int iniparser_getnsec(const dictionary * d);

/*
  *  @brief  获取某个section值
  *  @param  [IN]  d  dictionary结构的指针
  *  @param  [IN]  n  指定获取第几个section值           
  *  @return 成功返回获取到的section值,失败返回NULL
*/
const char *iniparser_getsecname(const dictionary * d, int n);

7、获取section下key个数

/*
  *  @brief  获取ini配置文件中某个section的key个数
  *  @param  [IN]  d  dictionary结构的指针 
  *  @param  [IN]  s  section          
  *  @return 返回指定section下的key个数
*/
int iniparser_getsecnkeys(dictionary * d, char * s); 

/*
  *  @brief  获取ini配置文件中某个section的所有key
  *  @param  [IN]  d  dictionary结构的指针 
  *  @param  [IN]  s  section      
  *  @param  [OUT]  keys  通过这个参数输出key,也可以通过返回值获取     
  *  @return  成功返回指定section下的key,失败返回NULL
*/
const char **iniparser_getseckeys(const dictionary *d, const char *s, const char **keys)

8、保存dictionary对象到文件中

/*
  *  @brief  保存dictionary对象到文件中
  *  @param  [IN]  d  dictionary结构的指针   
  *  @param  [IN]  f  已打开的文件描述符
*/
void iniparser_dump_ini(const dictionary *d, FILE *f);

9、释放dictionary对象

/*
  *  @brief  释放dictionary对象
  *  @param  [IN]  d  dictionary结构的指针   
*/
void iniparser_freedict(dictionary * d);

10、

/*
  *  @brief 用于向一个已经加载的 INI 配置文件的字典中添加一个条目(键值对)。
  *  @param  [IN] d dictionary结构的指针
  *  @param  [IN] sec 添加或修改的部分(section)的名称。
  *  @param  [IN] key 添加或修改的键名
  *  @param  [IN] val 键设置的值
*/
int iniparser_add_entry(dictionary * d, const char * sec, const char * key, const char * val);

你可能感兴趣的:(iniparser,linux,嵌入式)