一 ini格式概述 程序沒有任何配置文件,那么它對外是全封閉的,一旦程序需要修改一些參數必須要修改程序代碼本身并重新編譯,為了讓程序出廠后還能根據需要進行必要的配置,所以要用配置文件;配置文件有很多種,如INI配置文件,xml配置文件,cfg配置文件,還有就是可以使用系統注冊表等。
本文主要介紹INI文件的格式信息。 INI ”就是英文 “initialization”的頭三個字母的縮寫;當然INI file的后綴名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"。經典格式如下:
INI文件的格式很簡單,最基本的三個要素是:parameters,sections和comments。
什么是parameters?
INI所包含的最基本的“元素”就是parameter;每一個parameter都有一個name和一個value,如下所示:
name = value什么是sections ?
所有的parameters都是以sections為單位結合在一起的。所有的section名稱都是獨占一行,并且sections名字都被方括號包圍著([ and ])。在section聲明后的所有parameters都是屬于該section。對于一個section沒有明顯的結束標志符,一個section的開始就是上一個section的結束,或者是end of the file。Sections一般情況下不能被nested,當然特殊情況下也可以實現sections的嵌套。
section如下所示:
[section]什么是comments ?
在INI文件中注釋語句是以分號“;”開始的。所有的所有的注釋語句不管多長都是獨占一行直到結束的。在分號和行結束符之間的所有內容都是被忽略的。
注釋實例如下:
;comments text
當然,上面講的都是最經典的INI文件格式,隨著使用的需求INI文件的格式也出現了很多變種;
INI實例: ; last modified 1 APRil 2001 by John Doe
[owner]
name=John Doe
organization=Acme Products
[database]
server=192.0.2.42
; use ip address in case network name resolution is not working port=143 file = “acme payroll.dat”
變種格式:請參考http://en.wikipedia.org/wiki/INI_file
二 ini解析庫 github: https://github.com/ndevilla/iniparser
三 iniparser接口簡單介紹 Iniparse開源庫(不區分大小寫,且配置文件最后一行必須為空行)總共包括四個文件,iniparser.h,iniparser.c,dictionary.h,dictionary.其中dictionary為提供給iniparser的功能封裝。Iniparser提供的功能函數如下:
int iniparser_getnsec(dictionary * d); //獲取配置文件中的section的個數
char * iniparser_getsecname(dictionary * d, int n); //獲取配置文件中section名,n為索引值
void iniparser_dump_ini(dictionary * d, FILE * f); //保存配置文件至文件指針f所指的位置
void iniparser_dump(dictionary * d, FILE * f); //保存配置文件,多用于調試
char * iniparser_getstring(dictionary * d, char * key, char * def); //獲取關聯與key的字符串
int iniparser_getint(dictionary * d, char * key, int notfound); //獲取關聯與key的int值(轉換)
double iniparser_getdouble(dictionary * d, char * key, double notfound); //獲取關聯與key的double值(轉換)
int iniparser_getboolean(dictionary * d, char * key, int notfound); //獲取關聯與key的bool值(轉換)
int iniparser_set(dictionary * ini, char * entry, char * val); //修改配置文件中的一個配置項
void iniparser_unset(dictionary * ini, char * entry); //刪除配置文件中的一個配置項
int iniparser_find_entry(dictionary * ini, char * entry) ; //檢測一個配置項是否存在
dictionary * iniparser_load(char * ininame); //加載配置文件
void iniparser_freedict(dictionary * d); //釋放iniparse所占用的資源
新聞熱點
疑難解答