LINUX下解析配置文件(配合上篇使用)

本文介绍了Linux环境下KeyFile配置文件的基本格式及其与Windows ini文件的区别。通过一个简单的C语言示例程序展示了如何使用glib库中的GKeyFile接口来加载、查询、修改配置文件中的数据。
摘要由CSDN通过智能技术生成

配置文件在Linux下使用得非常普遍。形如下面的这个文件就是一个典型的配置文件

# 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[be@latin]=Hello
[Another Group]
Numbers=2;20;-200;0
Booleans=true;false;true;true

在Windows系统中,也存在这类文件,通常后缀名是ini。在GTK的世界中,称这类文件为Key File(因为这个文件包含很多的字段(key)?)。这两类文件看上去差不多,但是还是有一些区别的

  1. 首先就是注释,init文件把“;”视作注释开始,而Key File,显然是用“#”
  2. Key File所有的配置项都在配置段中,即任何配置项之前肯定有类似”[配置段]“的东西。
  3. 还有就是众所周知的,Windows下的ini文件通常不是UTF8编码,而Linux下,显然推荐这么干
  4. 另外就是配置项和配置段大小写,Linux下的key file是区分的
  5. 在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

运行效果怎么样呢?

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

范例程序很简单,但是五脏俱全,要使用glib来解析配置文件,大概有下面的几个流程:

  1. 首先用g_key_file_new()建立一个GKeyFile缓冲区
  2. 然后用g_key_file_load_from_file()来初始化填充这个缓冲区
  3. 接着,你就可以用g_key_file_get_数据类型()来获取数据了
  4. 或者,使用g_key_file_set_数据类型()来更新设置数据
  5. 而且,使用g_key_file_remove_key()来删除设置项
  6. 那么增加设置项呢?当设置数据时,如果没有该数据项,默认就会增加
  7. 当然,在此之前,如果不放心的话,还可以通过g_key_file_has_group()、g_key_file_has_key()来判断数据段、数据项是否存在
  8. 末了,你可能想把更新后的配置写回去,这个有点怪,需要用g_key_file_to_data()将缓冲区里的配置数据转成字符串,然后将这个字符串写入到配置文件即可。这个函数同时也会返回字符串的长度,供写入时使用
  9. 最后,一个良好的习惯——调用g_key_file_free()来释放缓冲区

数据类型包括字符串、整形、长整型、浮点……,以及这类数据组成的数组。
另外glib甚至还可以读写各个配置项上的注释,神奇吧?
更多的神奇,还是参考glib的官方文档去吧

 

转自:http://www.gooth.cn/b/archives/date/2010/08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值