簡體   English   中英

我不明白 inih 是如何工作的

[英]I don't understand how inih works

幾個小時以來,我一直在嘗試使用 inih lib 讀取 ini 文件,但我仍然不完全理解這段代碼,尤其是configuration* pconfig = (configuration*)user; ,以及處理程序 function 參數的用途是什么?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../ini.h"

typedef struct
{
    int version;
    const char* name;
    const char* email;
} configuration;

static int handler(void* user, const char* section, const char* name,
                   const char* value)
{
    configuration* pconfig = (configuration*)user;

    #define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
    if (MATCH("protocol", "version")) {
        pconfig->version = atoi(value);
    } else if (MATCH("user", "name")) {
        pconfig->name = strdup(value);
    } else if (MATCH("user", "email")) {
        pconfig->email = strdup(value);
    } else {
        return 0;  /* unknown section/name, error */
    }
    return 1;
}

int main(int argc, char* argv[])
{
    configuration config;

    if (ini_parse("test.ini", handler, &config) < 0) {
        printf("Can't load 'test.ini'\n");
        return 1;
    }
    printf("Config loaded from 'test.ini': version=%d, name=%s, email=%s\n",
        config.version, config.name, config.email);
    return 0;
}

user是“通用指針”或“無類型指針”。

取消引用該指針會給你一個void類型的值,這是不可能的。

因此,您必須將指針轉換為正確的類型才能使用它。


至於 arguments 以及它們的用途,您可以閱讀源代碼

但是稍微了解一下INI文件應該很容易推斷出section參數是文件中的一個部分的名稱,而name是當前值的名稱,而value是值本身。

所以假設一個部分和值像

[foo]
bar = something

然后section將是"foo"name將是"bar"value將是"something"

user參數很可能是傳遞給ini_parse的第三個參數。

user顯然是指向您提供給ini_parseconfiguration實例的指針。 void*是 C 中可用指針的唯一類型擦除。

section是.ini 文件部分的名稱, name是鍵名, value是鍵的值。

ini_parse為每個鍵調用處理程序,將configuration和解析迭代的結果傳遞給它。 處理程序對該信息的處理由庫的用戶定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM