admin 管理员组文章数量: 1184232
2024年4月16日发(作者:phonegap原理)
libconfig手册
翻译自libconfig英文版手册部分内容——倪里特
1、 配置文件
libconfig支持结构化、层次化的配置。这些配置可以从文件中读取或写入文件,也可以
在内存中操作。
一个配置由一组setting构成,setting由名字(name)关联,并有相应的值(value)。
一个值(value)可以是以下任意一种类型:
标量值(scalar value):整型、64位整型、浮点数、布尔值或者字符串
数组(array):一组标量值的序列,所有的标量值必须为同一类型
群组(group):多个setting的集合
列表(list):一组值(value)的序列,各个值可(value)以分别为不同的类型,其他
的列表也可以包含其中。
观察下面这一个层次化GUI应用程序的配置文件,它阐明了一个配置文件语法所有的元素。
#Exampleapplicationconfigurationfile
version="1.0";
application:
{
window:
{
};
list=(("abc",123,true),1.234,(/*anemptylist*/));
books=(
{
},
{
}
title="SnowCrash";
author="NealStephenson";
price=9.99;
qty=8;
title="TreasureIsland";
author="RobertLouisStevenson";
price=29.95;
qty=5;
title="MyApplication";
size={w=640;h=480;};
pos={x=350;y=250;};
);
};
misc:
{
};
pi=3.141592654;
bigint=9223372L;
columns=["LastName","FirstName","MI"];
bitmask=0x1FC3;
包含在配置中的某个setting可以用path来唯一定义,path用点号分隔连接多个名字
(name),由最顶层的群组(group)开始,到setting自身结束。path中的每个名字都
是一个setting的名字;如果这个setting没有名字,那是因为它是数组(array)或
列表(list)中的一个元素。用方括号包含一个整型索引值可以用来表示它的名字。
举个例子,在上面这个多层的配置文件中,名为x的setting,指向它的path就是
.x;名为version的setting,指向它的path就是很简
单的version;指向book列表中第2个book,名为title的setting,指向它的path
就是.[1].title。
一个值(value)的数据类型由它本身的格式所决定。
如果一个值用双引号围住,那它被认为是一个字符串;
如果它看起来是一个整型或浮点数,那它就被认为是整型或浮点数;
如果它是TRUE、FALSE、true、false中的某个,那它就被认为是布尔值(TRUE、
FALSE大小写不敏感,比如tRuE或fALse也被看作为TRUE或FALSE);
如果在方括号中包含了多个逗号分隔的值,那它就被认为是数组;
如果在圆括号中包含了多个逗号分隔的值,那它就被认为是列表;
任何值如果不符合上述的标准,则会被认为是无效并且产生一个分析错误。
所有的名字(name)都是大小写敏感的,并且只能由数字字母、横杠(-),下横杠(_)
和星号(*)组成,而且必须以字母或星号开头。其他字符都是非法的。
在C和C++中,整型、64位整型、浮点数和字符串分别被映射为int、long long、
double和const char *。布尔型在C中被映射为int,在C++中被映射为bool。
下面的章节会从更多的细节方面描述配置文件语法的各个元素。
1.1、 setting
一个setting的格式如下:
name = value;
或者
name : value;
结尾的分号是必须要有的,空白字符会被忽略;
value可以是标量值、数组、群组或者列表。
1.2、 群组(group)
一个群组的格式如下:
{setting1, setting2, …}
一个群组可以包含任意个setting,但是在群组中,每个setting的名字必须是唯一的。
1.3、 数组(array)
一个数组的格式如下:
[value, value, …]
一个数组可以有零个或者多个元素,但是每个元素都必须是相同类型的标量值。
1.4、 列表(list)
一个列表的格式如下:
(value, value, …)
一个列表可以有零个或者多个元素,而且每个元素可以分别是标量值、数组、群组或其他列
表。
1.5、 整型值
整型值(int)可以用两种方式表示:十进制数,由0-9组成,并且可以带+或-;十六进
制数,0x打头并且用十六进制数表示。
1.6、 64位整型值
64位整型值(long long)表示方法和整型值基本一致,但是需要在最后加上L来表明它
是一个64位整型值。比如0L表示一个64位的0值。
1.7、 浮点值
浮点值由一个十进制数,可以带正负符号,然后带上一个可选的指数。这个可选的指数又由
字母E或者e加上一个可选的正负符号再加上具体的数字。
1.8、 布尔值
布尔值的取值只能是true和false,包括另外大小写混合的写法,比如tRue或FaLSe。
1.9、 字符串
字符串是由双引号引起来的任意文本。字符串里的双引号由转义符”替代,其他的转义符
比如、f、r、n、t都可以被辨认,并且与通常的理解一致。
另外,转义符x也被支持。它后面必须跟上刚好两个十六进制数,用来表示8位的ASCII
值,比如xFF表示值为0xFF的ASCII码。
其他的转义符都不被支持。
相邻的两个字符串会被自动连接,就像C的编码规则一样。在把一个很长得字符串格式化
为很短的字符串的时候,就会很有用。比如,下面三种写法的字符串都是等价的。
"Thequickbrownfoxjumpedoverthelazydog."
"Thequickbrownfox"
"jumpedoverthelazydog."
"Thequick"/*注释*/"brownfox"//其他注释
"jumpedoverthelazydog."
1.10、 注释
在配置文件中允许三种类型的注释
脚本风格的注释:从#开始到行尾的内容都为注释。
C风格的注释:/* 和*/之间的内容,即使是跨行的,都被认为是注释。
C++风格的注释:从//开始到行尾的内容都被认为是注释。
如预料的一样,注释符在双引号字符串中出现,会被认为是字符串的文本而不是注释符。
在读取配置的时候,注释内容会被忽略,它们不会被认为是配置的一部分。因此,如果配置
回写到文件中,原配置文件中的一些注释会丢失。
1.11、 包含指令
一个配置文件可能包含了另外一个配置文件的内容,这时就要用到包含指令。这个指令产生
的效果就是在包含点内联了那个文件的内容。
一个包含指令必须出现在它所在的那一行中,格式如下:
@include “filename”
文件名中反斜杠和双引号必须用转义符和”来替代。
举例说明,观察下面两个配置文件
#file:
quote = "Criticismmaynotbeagreeable,butitisnecessary."
"Itfulfilsthesamefunctionaspaininthehuman"
"sattentiontoanunhealthystateof"
"things.n"
"t--WinstonChurchill";
#file:
info:{
};
name="WinstonChurchill";
@include""
country="UK";
包含文件最大只能嵌套10层,突破这个限制会产生一个分析错误。
与注释类似,包含指令也不是配置文件句法的一部分。包含指令在配置文件被分析之前就已
经被处理了。因此,当配置回写回文件的时候,包含指令不会被保留。目前还不支持让程序
把包含指令插入到配置文件中。
2、 API
见英文手册
版权声明:本文标题:libconfig中文手册 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713233410a625167.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论