使用 libconfig 使純 C 語言支援 config.ini 讀寫教學

 

最近公司開始有新想法,加上 ESP32 要讀寫資料,
開始在研究怎麼在純 C 裡面讀寫 config.ini。


因為經手的專案都搭配 Makefile 編譯,
所以本篇也會一併紀錄 Makefile 設定眉角。


我的環境是 Ubuntu 22.04,
apt 裡面沒辦法直接裝 libconfig,
於是首先先下載 libconfig 的壓縮包:

前往 libconfig 的 Github 頁面下載


從別人那邊轉貼的安裝流程:

# 解壓縮
tar -zxvf libconfig-你下載的版本編號.tar.gz

# 進入工作資料夾

cd libconfig-你下載的版本編號
./configure

# 編譯
make -j8

# 檢查編譯有沒有壞掉
make check

# 開始安裝
sudo make install

# 複製檔案到你想要的地方,這邊一定要 sudo 不然 .so 會進不去
# 原版教學
sudo cp -d ./lib/libconfig* /usr/lib
# 想用 Makefile 包進專案
sudo cp -d ./lib/libconfig* /usr/include


# 檢查安裝路徑是否正確
sudo ldconfig -v

在你的 Makefile 做兩件事情
1. 確定 CFLAG 裡面包含 /usr/include(通常會包)
2. -LDFLAG 後面加上 -lconfig 


接下來就能讀寫 config.ini


接下來就能

config_t cfg;
config_setting_t *setting;
config_init(&cfg);

//讀取整份文件
config_read_file(&cfg, "config.cfg");

//讀取特定的 value
const char *value;
config_lookup_string(&cfg, "section1.key1", &value);

//寫入特定的 value 至暫存
setting = config_lookup(&cfg, "section1.key2");
config_setting_set_string(setting, "new_value");

//將暫存寫入文件
config_write_file(&cfg, "config.cfg");

要特別注意的是這個套件支援的 ini格式有點不一樣
這格式長這樣:

section:
{
    key1 = value1
    key2 = value2
    key3 = value3
}

完美 謝謝指教

留言

這個網誌中的熱門文章

[心得] 破解 Google 雲端下載限制(非建立副本)