1. 程式人生 > >Linux下解析配置檔案和GKeyFile讀取配置檔案

Linux下解析配置檔案和GKeyFile讀取配置檔案

# this is just an example
# there can be comments before the first group
[First Group]
Name=Key File Exampletthis value showsnescaping
# localized strings are stored in multiple key-value pairs
Welcome=Hello
Welcome[de]=Hallo
Welcome[fr_FR]=Bonjour
Welcome[it]=Ciao
Welcome[[email protected]]=Hello
[Another Group]
Numbers=2
;20;-200;0 Booleans=true;false;true;true

在Windows系統中,也存在這類檔案,通常字尾名是ini。在GTK的世界中,稱這類檔案為Key File(因為這個檔案包含很多的欄位(key)?)。這兩類檔案看上去差不多,但是還是有一些區別的:

首先就是註釋,init檔案把“;”視作註釋開始,而Key File,顯然是用“#”
Key File所有的配置項都在配置段中,即任何配置項之前肯定有類似”[配置段]“的東西。
還有就是眾所周知的,Windows下的ini檔案通常不是UTF8編碼,而Linux下,顯然推薦這麼幹
另外就是配置項和配置段大小寫,Linux下的key file是區分的
在Keyfile中允許資料型別為邏輯型的配置項,取值為true或者false。而ini檔案裡大概只有用整形的配置專案與之對應了

//簡單介紹完了,我們在用一個簡單的例子:
#include
#include
int main(int argc, char **argv)
{
GKeyFile * config;
gchar *str;
config = g_key_file_new();
g_key_file_load_from_file(config, argv[1], 0, NULL);
str=g_key_file_get_string(config,"options","HoldPkg",NULL);
printf("HoldPkg of options section is "%s"n", str);
g_key_file_free(config);
return
0; }

使用下面的命令編譯:

gcc `pkg-config --cflags --libs glib-2.0` dummy.c

這裡的pkg-config –cflags –libs glib-2.0用於自動查詢呼叫glib所需的標頭檔案和庫檔案路徑,並且按照CFLAGS所需的格式輸出。
我們用的範例配置檔案(援引自pacman的配置檔案)如下:

[options]
HoldPkg = pacman glibc

執行效果怎麼樣呢?

[email protected].nts-intl.com tmp]$./a.out /etc/pacman.conf
HoldPkg of options section is "pacman glibc"

範例程式很簡單,但是五臟俱全,要使用glib來解析配置檔案,大概有下面的幾個流程:

首先用g_key_file_new()建立一個GKeyFile緩衝區
然後用g_key_file_load_from_file()來初始化填充這個緩衝區
接著,你就可以用g_key_file_get_資料型別()來獲取資料了
或者,使用g_key_file_set_資料型別()來更新設定資料
而且,使用g_key_file_remove_key()來刪除設定項
那麼增加設定項呢?當設定資料時,如果沒有該資料項,預設就會增加
當然,在此之前,如果不放心的話,還可以通過g_key_file_has_group()、g_key_file_has_key()來判斷資料段、資料項是否存在
末了,你可能想把更新後的配置寫回去,這個有點怪,需要用g_key_file_to_data()將緩衝區裡的配置資料轉成字串,然後將這個字串寫入到配置檔案即可。這個函式同時也會返回字串的長度,供寫入時使用
最後,一個良好的習慣——呼叫g_key_file_free()來釋放緩衝區

資料型別包括字串、整形、長整型、浮點……,以及這類資料組成的陣列。
另外glib甚至還可以讀寫各個配置項上的註釋,神奇吧?
更多的神奇,還是參考glib的官方文件去吧。
另外,聽說還有個叫做iniparser的小玩意,也是幹這事兒的,大家有空沒空可以去圍觀一下。
http://tiaozhanshu.com/node/313

二.GKeyFile讀取配置檔案
對於GKeyFile生成的格式檔案,同樣可以通過此資料結構進行讀取檔案中的配置資訊,生成的配置檔案內容為:

[STARTUP]
x=300
y=600
center=true
timestamp=1314432584
random=0.78204092288815774

[PATH]
bin_path=/bin;/sbin;/usr/bin;/usr/local/bin;/home/jcodeer/bin;

這次使用GKeyFile將其中的每一鍵項讀取出來,進行輸出。程式程式碼:

#include

int main(int argc,char** argv){
    GKeyFile* config = g_key_file_new();
    g_key_file_load_from_file(config,"./019.ini",G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS,NULL);

#define STARTUP "STARTUP"
#define PATH    "PATH"

    gchar* x = g_key_file_get_value(config,STARTUP,"x",NULL);
    g_print("x = %s\n",x);

    gchar* y = g_key_file_get_string(config,STARTUP,"y",NULL);
    g_print("y = %s\n",y);

    gboolean center = g_key_file_get_boolean(config,STARTUP,"center",NULL);
    g_print("center = %d\n",center);

    gint timestamp = g_key_file_get_integer(config,STARTUP,"timestamp",NULL);
    g_print("timestamp = %u\n",timestamp);

    gdouble random = g_key_file_get_double(config,STARTUP,"random",NULL);
    g_print("random = %0.10f\n",random);

    gsize length,i;
    gchar** bin_path = g_key_file_get_string_list(config,PATH,"bin_path",&length,NULL);

    g_print("bin_path=");
    for(i = 0; i < length;i++){
        g_print("%s;",bin_path[i]);
    }
    g_print("\n");

#undef STARTUP
#undef PATH

    g_key_file_free(config);
    return 0;
}

相關推薦

Linux解析配置檔案GKeyFile讀取配置檔案

# this is just an example # there can be comments before the first group [First Group] Name=Key File Exampletthis value showsnesc

linuxnginx、phpmysql安裝配置

一、安裝nginx 安裝nginx yum install -y epel-release yum install nginx -y 檢視nginx軟體包包括了哪些檔案 rpm -ql nginx 啟動nginx systemctl start nginx 檢視ng

LinuxNexus Repository3安裝maven,npm配置

Nexus Repository下載 根據作業系統選擇指定版本,本文針對Linux安裝,其他的安裝過程可能有所差異。 https://help.sonatype.com/repomanager3/download/download-archives---repository-manager-3 安裝

linux靜態庫.a動態庫.so檔案的生成使用

1.靜態庫是一些目標檔案(字尾名為.o)的集合體而已。 2.靜態庫的字尾名是.a,對應於windows作業系統的字尾名為.lib的靜態庫。 3.可以使用ar命令來建立一個靜態庫檔案。 來看一個例項,根據書中的程式碼簡化的,先看一看可以編譯成庫檔案的原始檔中的程式碼: /* test.c */ i

linux安裝warpctc,mxnetpython介面配置

nstall baidu warpctc Build the MXNet core shared libraryStep 1 Install build tools and Git.$ sudo apt-get update $ sudo apt-get install -

Linux自動備份資料庫刪除歷史備份檔案

一、Linux下自動備份資料庫通常情況下,檔案備份大家喜歡名稱+備份日誌來命名備份檔案。下面以此為例說明:(1)建立備份指令碼檔案,並編寫備份指令碼。[root@test02 backup]# touch backup.sh #建立指令碼檔案 [root@test02 ba

Linux解析配置檔案

配置檔案在Linux下使用得非常普遍。形如下面的這個檔案就是一個典型的配置檔案: # this is just an example # there can be comments before the first group [First Group] Name=Ke

linuxjdk的安裝配置

rac -s watermark img 使用 etc 文件拷貝 安裝 com 一、首先依據自己的系統位數在網上下載對應的jdk安裝包 下載地址例如以下:http://www.oracle.com/technetwork/java/javase/downloads/jd

Linux使用者許可權管理防火牆配置

1、Linux使用者許可權管理 1.1、修改密碼 (1)如果是root超級使用者: passwd 使用者名稱 //修改該使用者密碼 passwd -l 使用者名稱 //鎖定該使用者,-l:lock passwd -u 使用者名稱 //解禁該使用者,-u:unlock (2)如果是

Linux使用QT編寫呼叫動態連結庫(.so檔案

Linux下Qt建立和呼叫共享庫檔案.so 費了點功夫,總算get了編寫共享庫(Shared Library,Windows下稱為“動態連結庫”,即Dynamic Link Library)和呼叫的這個新技能! 動態連結庫的好處是不言而喻的,一個稍微複雜一點的程式,頂層設計的時候良好

LinuxJetty的安裝配置

Jetty簡介 Jetty是一個開源的servlet容器,它為基於Java的web內容,例如JSP和servlet提供執行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式釋出。開發人員可以將Jetty容器例項化成一個物件,可以迅速為一些獨立執行(st

linux程式設計工具推薦配置-vim

工欲善其事,必先利其器 從網上找的兩個比較強大的程式碼編輯和工程開發工具,沉下心來,好好配置一下,畢竟程式碼是陪伴程式設計師一生最長久的夥伴,值得好好打理一下。 為了方便大家下載使用,我把它

linux elasticsearch的安裝配置(一)

1. 安裝地址 https://www.elastic.co/products/elasticsearch 2. 使用 xshell 將壓縮包上傳到linux上,解壓elasticsearch-5.6.1.tar.gz到/home目錄下。 切記不要放在root目錄下 3

MongoDB學習一--在Linux的yum安裝配置

MongoDB is an open-source document database that provides high performance, high availability, and automatic scaling. 正式學習MongoDB了,從官網htt

Linux解析argcargv引數

int main(int argc,char *argv[]); 第一個引數argc用來存放命令列引數的個數 第二個引數argv是指標陣列,它是用來存放命令列中各個引數和命令字的字串的 這裡,argc

Linux用於瀏覽網頁下載檔案的幾個命令列工具

1. links Links是用C語言寫的一個開源web瀏覽器,支援包括Linux、Windows、OS X和OS/2在內的所有主流平臺。它提供了基於文字和圖形介面兩種版本。大多數標準的Linux發行版都預設包含了基於文字的版本。如果您的發行版中預設沒有安裝links,

linux 利用ls grep 正則表示式實現目錄檔案的分開顯示

要列出當前目錄下所有的檔名和目錄名直接使用ls命令即可。但如何只列出檔名而不列出目錄呢?查遍了ls 的幫助,也沒看到有這個現成的選項。幸好這個問題還是比較常見的,網上已經有了一些解答,但實驗之後,我發現看到的幾個連結給出的解決方法都是不完全正確的。具體如下。一、網上流傳的解

給大家發一個linuxvim的很好用的配置檔案

親測非常非常好用,用起來很舒服! 而且最重要的是一鍵安裝! 下面是原始碼網址 https://github.com/ma6174/vim 上面是原始碼網址(新人賺分不容易啊) 以下是簡介:超強vim配置檔案執行截圖 簡易安裝方法: 開啟終端,執行下面的命令就自動安裝好了: wget -qO- https:

java web路徑spring讀取配置檔案

此篇部落格緣起:部署java web系統到阿里雲伺服器(ubuntu14.04)的時候,有以下兩個問題 找不到自定義的property配置檔案上傳圖片的時候找不到路徑開發的時候是在windows上的,執行正常,部署的時候就出問題了,肯定是windows和linux路徑區別導致的(一個小問題來回鼓搗了幾個小時

ubuntu 16.04 linuxmongodb的安裝配置

目錄 測試環境: 安裝步驟: 操作資料庫 測試環境: ubuntu: 16.04.4 LTS gcc: 5.4.0 mongdb: 3.6.6 linux:檢視版本 uname -a cat /etc/issue