自己今天根据项目里的需要编写出来的很简单的函数,读取配置文件的一行内容,配置文件格式为:
#888888注释
name = value
可以包含注释,不用考虑空格,和项目名称大小写,函数返回项目内容。
#ifndef READCONF_H #define READCONF_H
#include "head.h"
#define CONLINELENGTH 1024 //配置文件一行的长度最大值
char *ReadConfigfile(char *fileName, char *item);
#endif
#include "readconf.h" /************************** *函数功能:读取配置文件的一行信息 *输入参数:配置文件的名字fileName,要读取的项目名称item(不用考虑空格及大小写) *输出结果:项目信息 *返回值:成功返回信息内容,出错返回NULL *******************************/ char *ReadConfigfile(char *fileName, char *item) { FILE *fp; char *locate = NULL; char *pmove = NULL; char confLine[CONLINELENGTH] = {}; char context[CONLINELENGTH] ={}; int result = 1; char *pline; int itl; if((fp = fopen(fileName, "r")) == NULL) { printf("Open file : %s failed!!\n", fileName); return NULL; } while(fgets(confLine, CONLINELENGTH, fp) != NULL) { pline = confLine; if(*pline == '#') { memset(confLine, '0', CONLINELENGTH); continue; } while(isspace(*pline) != 0)pline++; locate = strchr(pline, '='); if(locate == NULL) { memset(confLine, '0', CONLINELENGTH); continue; } pmove = locate; pmove--; while(isspace(*pmove) != 0)pmove--; itl = pmove - pline + 1; if(itl == strlen(item)) { result = strncasecmp(pline, item, itl); if(result == 0) { locate++; while(isspace(*locate) != 0)locate++; pmove = locate; while(isspace(*pmove) == 0)pmove++; if(pmove-locate+1>0) { strncpy(context, locate, pmove-locate+1); break; } else { return NULL; } } else { memset(confLine, '0', CONLINELENGTH); continue; } } else { memset(confLine, '0', CONLINELENGTH); continue; } } fclose(fp); return context; } |