Iniparser库详解

Posted Respect@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Iniparser库详解相关的知识,希望对你有一定的参考价值。

这里写自定义目录标题

1.概念

iniparser是针对INI文件的解析器。ini文件则是一些系统或者软件的配置文件。

程序员最应该懂得的第一件事情就是利用别人造好的轮子,我们使用开源库的实现https://github.com/ndevilla/iniparser。

那我们怎么实现从ini文件里加载上这些内容呢?首先分析就是读取文件内容,然后依照文件内容,把这些字段和值组成key-value的形式保存在某个数据结构中,这样我们通过key(区段+字段)就能找到value(值)

格式

[database]
ip       = 127.0.0.1 ;
port     = 3306 ;
user     = root ;
pwd      = 123456 ;
db       = qiniubike;

[server]
port     = 9090;

例子

typedef struct st_env_config

   //数据库的配置
   std::string db_ip;
   unsigned short db_port;
   std::string db_user;
   std::string db_pwd;
   std::string db_name;

   //服务的配置
   unsigned short svr_port;

   st_env_config()
   
   ;

   st_env_config(const std::string& db_ip, unsigned int db_port, const std::string& db_user, \\
                 const std::string& db_pwd, const std::string& db_name, unsigned short svr_port)
   
       this->db_ip    = db_ip;
       this->db_port  = db_port;
       this->db_user  = db_user;
       this->db_pwd   = db_pwd;
       this->db_name  = db_name;
       this->svr_port = svr_port;
   ;

   st_env_config& operator =(const st_env_config& config)
   
       if (this != &config)
       
		   this->db_ip    = config.db_ip;
		   this->db_port  = config.db_port;
		   this->db_user  = config.db_user;
		   this->db_pwd	  = config.db_pwd;
		   this->db_name  = config.db_name;
		   this->svr_port = config.svr_port;

        
        return *this;
    
_st_env_config;

bool Iniconfig::loadfile(const std::string& path)

    dictionary*   ini = NULL;

    ini = iniparser_load(path.c_str());
    if (ini==NULL)
    
        LOG_ERROR("cannot parse file: %s\\n", path.c_str());
        return false;
    

    char* ip    = iniparser_getstring(ini, "database:ip", "127.0.0.1");
    int   port  = iniparser_getint(ini, "database:port", 3306);
    char* user  = iniparser_getstring(ini, "database:user", "root");
    char* pwd   = iniparser_getstring(ini, "database:pwd", "123456");
    char* db    = iniparser_getstring(ini, "database:db", "dongnaobike");
    int   sport = iniparser_getint(ini, "server:port", 9090);

    _config = st_env_config(std::string(ip), port, std::string(user), \\
        std::string(pwd), std::string(db), sport);

    iniparser_freedict(ini);

    _isloaded = true;

    return true;

以上是关于Iniparser库详解的主要内容,如果未能解决你的问题,请参考以下文章

INI文件解析源码及使用简介

C语言Linux下动态库和静态库详解

Ini解析 --iniparser

C/C++ 操作ini文件(SinpleIni 跨平台库)

linux 进程间通信 dbus-glib实例详解四(下) C库 dbus-glib 使用(附代码)

linux 进程间通信 dbus-glib实例详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)