首頁 > 軟體

C語言Iniparser庫實現ini檔案讀寫

2023-03-21 06:01:53

一、概述

iniparser是針對INI檔案的解析器。ini檔案則是一些系統或者軟體的組態檔。iniparser庫的API可以對ini檔案(組態檔)進行解析、設定、刪除等操作。

常見的 ini 讀寫開源庫有:minIni、inifile、iniparser

二、使用

下載

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

方式一

1.編譯

下載後進入檔案根目錄,使用 make 命令編譯,編譯完成後會生成 libiniparser.a 和 libiniparser.so.1 檔案

2.測試

iniparser 提供了測試程式,進入 example 目錄,使用 make命令編譯,完成後會生成 iniexample 執行檔案

3.測試結果

4.注意事項

使用連結檔案時,可以參考 example 目錄下的 Makefile 檔案

方式二

此方法使用比較簡單,直接將 src 目錄下的檔案拷貝到工程中即可,使用方式和自己編寫的 .c 和 .h 檔案一樣

三、API函數

iniparser.h

/* 獲取dictionary物件的section個數 */
int iniparser_getnsec(dictionary *d);
 
/* 獲取dictionary物件的第n個section的名字 */
char * iniparser_getsecname(dictionary *d, int  n);
 
/* 儲存dictionary物件到file */
void iniparser_dump_ini(dictionary * d, FILE * f);  
 
/* 儲存dictionary物件一個section到file */
void iniparser_dumpsection_ini(dictionary * d, char * s, FILE * f); 
 
/* 列印 ini 檔案內容 */
void iniparser_dump(dictionary * d, FILE * f);  
 
/* 獲取dictionary物件某個section下的key個數 */
int iniparser_getsecnkeys(dictionary * d, char * s); 
 
/* 獲取dictionary物件某個section下所有的key */
char ** iniparser_getseckeys(dictionary * d, char * s); 
 
/* 返回dictionary物件的section:key對應的字串值 */
char * iniparser_getstring(dictionary * d, const char * key, char * def);   
 
/* 返回idictionary物件的section:key對應的整形值 */
int iniparser_getint(dictionary * d, const char * key, int notfound); 
 
/* 返回dictionary物件的section:key對應的雙浮點值 */
double iniparser_getdouble(dictionary * d, const char * key, double notfound);  
 
/* 返回dictionary物件的section:key對應的布林值 */
int iniparser_getboolean(dictionary * d, const char * key, int notfound); 
 
/* 設定dictionary物件的某個section:key的值 */
int iniparser_set(dictionary * ini, const char * entry, const char * val); 
 
/* 刪除dictionary物件中某個section:key */
void iniparser_unset(dictionary * ini, const char * entry); 
 
/* 判斷dictionary物件中是否存在某個section:key */
int iniparser_find_entry(dictionary * ini, const char * entry) ; 
 
/* 解析dictionary物件並返回(分配記憶體)dictionary物件 */
dictionary * iniparser_load(const char * ininame); 
 
/* 釋放dictionary物件(記憶體) */
void iniparser_freedict(dictionary * d);

dictionary.h

/* 計算關鍵詞的hash值  
unsigned dictionary_hash(const char * key); 
 
/* 建立dictionary物件 */
dictionary * dictionary_new(int size);  
 
/* 刪除dictionary物件 */
void dictionary_del(dictionary * vd); 
 
/* 獲取dictionary物件的key值 */
char * dictionary_get(dictionary * d, const char * key, char * def); 
 
/* 設定dictionary物件的key值 */
int dictionary_set(dictionary * vd, const char * key, const char * val); 
 
/* 刪除dictionary物件的key值 */
void dictionary_unset(dictionary * d, const char * key); 
 
/* 儲存dictionary物件 */
void dictionary_dump(dictionary * d, FILE * out);

四、演示

1.test.ini 檔案

#
# 測試檔案
#
 
[Node]
Test                           = 1234

2.test.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
 
#include "iniparser.h"
 
 
#define FILE_INI "test.ini"
 
/**
 * @brief 讀取 ini 檔案的設定資訊
 * 
 * @param read_buf 讀取緩衝去
 * @param return 返回操作結果
 */
int get_ini_info(int *read_buf)
{
    dictionary  *ini;
 
    ini = iniparser_load(FILE_INI);
    if (ini==NULL) {
        fprintf(stderr, "cannot parse file: %sn", FILE_INI);
        return -1;
    }
 
    /* 列印檔案內容 */
    // iniparser_dump(ini, stderr);
 
    /* 讀取壓力等級的判斷資訊 */
    *read_buf = iniparser_getint(ini, "node:test", -1);
 
    iniparser_freedict(ini);
    return 0;
}
 
/**
 * @brief 寫入 ini 檔案的設定資訊
 * 
 * @param write_buf 寫入緩衝區
 * @param return 返回操作結果
 */
int set_ini_info(const char *write_buf)
{
    dictionary  *ini;
    FILE *fp = NULL;
 
    ini = iniparser_load(FILE_INI);
    if (ini==NULL) {
        fprintf(stderr, "cannot parse file: %sn", FILE_INI);
        return -1;
    }
 
    /* 寫入壓力等級的判斷資訊 */
    iniparser_set(ini, "node:test", write_buf);
 
    /* 將資訊儲存到檔案中 */
    fp = fopen(FILE_INI, "w");
    if( fp == NULL ) {
        fprintf(stderr, "stone:fopen error!n");
        return -1;
    }
    iniparser_dump_ini(ini, fp);
 
    fclose(fp);
    iniparser_freedict(ini);
    return 0;
}
 
int main (int argc, char **argv)
{
    int num = 0;
    set_ini_info("1234");
    get_ini_info(&num);
    printf("date is: %d n", num);
}

3.檔案目錄

4.編譯

gcc test.c dictionary.c iniparser.c -o test

5.測試效果

到此這篇關於C語言Iniparser庫實現ini檔案讀寫的文章就介紹到這了,更多相關C語言 ini檔案讀寫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com