我们在程序编写中往往会遇到这样的情况,程序运行中我们会读取配置文件,从中读取我们程序需要的各种参数与配置信息,我一般采用读取配置文件和使用Berkeley db的方式,这两种方式的移植性都较好,当然前者更好,但是后者也有它的好处,它可以很好的处理配置信息的读取等等,但是它需要bdb库的支持,虽然库很小,但对我们来讲,还是麻烦,所以我们一般还是采用读取配置文件的方式,而读取配置文件的方式又有很多种,本篇就讲第一种方式,也是我最常用的一种方式,单纯的用C库函数来实现.
一.示例
这里我们还是以usb_modeswitch的代码为例子进行讲解,首先看一下它的配置文件:usb_modeswitch.conf,其中的格式如下部分所示:
########################################################
# Huawei E630
#
# There seem to be modem-only variants around - no storage,
# no switching
#
# Contributor: Joakim Wenrgren
;DefaultVendor= 0x1033
;DefaultProduct= 0x0035
;TargetVendor= 0x12d1
;TargetProduct= 0x1003
# choose one of these:
;HuaweiMode=1
;DetachStorageOnly=1
########################################################
二.读取此配置文件的程序实现
/
//
/**********************************************************
//真正的配置文件解析函数,它的实现很简单,就不详细分析了,主要就是利用几个标准库函数就可以处理了,
//主要包括:fgets,strchr ,strcspn ,strrchr ,strspn ,
//
//
**********************************************************/
/***************************************/
// the parameter parsing stuff
/***************************************/
char* ReadParseParam(const char* FileName, char *VariableName)
{
static char Str[LINE_DIM];
char *VarName, *Comment=NULL, *Equal=NULL;
char *FirstQuote, *LastQuote, *P1, *P2;
int Line=0, Len=0, Pos=0;
FILE *file=fopen(FileName, "r");
if (file==NULL) {
fprintf(stderr, "Error: Could not find file %s/n/n", FileName);