配置文件内容格式:
#test
test = 123
test2 = aaa #test2
configfile.c
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
/***********************************************************************
* 函数名 :configFileDelRightTrim
* 功能描述 :删除右边的空格
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
void configFileDelRightTrim(char *cpStr)
{
int i = 0;
if(cpStr == NULL)
{
return ;
}
//
for(i = strlen(cpStr); i > 0; i--)
{
if(isspace(cpStr[i - 1]))
{
cpStr[i - 1] = 0;
}
else
{
break;
}
}
}
/***********************************************************************
* 函数名 :configFileDelLeftTrim
* 功能描述 :删除左边的空格
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
void configFileDelLeftTrim(char *cpStr)
{
int i = 0;
int count = 0;
int len = 0;
if(cpStr == NULL)
{
return ;
}
for(i = 0; i < strlen(cpStr); i++)
{
if(isspace(cpStr[i]))
{
count++;
}
else
{
break;
}
}
if(count == 0)
{
return ;
}
else
{
len = strlen(cpStr) - count;
memcpy(cpStr,cpStr + count,len);
cpStr[len] = 0;
}
}
/***********************************************************************
* 函数名 :configFileIsNotes
* 功能描述 :
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
int configFileIsNotes(char *buf)
{
if(buf == NULL)
{
return FALSE;
}
while(*buf != 0)
{
if(isspace(*buf))
{
buf++;
continue;
}
if(*buf == '#')
{
return TRUE;
}
else
{
return FALSE;
}
}
}
/***********************************************************************
* 函数名 :configFileStrGet
* 功能描述 :
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
int configFileStrGet(char *confFile,char *cpName,char *cpValue,int iValueLen)
{
FILE *fp = NULL;
char buf[512];
char *cpStr = NULL;
char *cpNamePtr = NULL;
char *cpValuePtr = NULL;
if(confFile == NULL || cpName == NULL || cpValue == NULL)
{
return -1;
}
if((fp = fopen(confFile,"r" )) == NULL)
{
printf("configFile %s open failed\r\n",confFile);
return -1;
}
memset(buf,0,sizeof(buf));
while((0 == feof(fp)) && (fgets(buf,sizeof(buf) - 1,fp) != NULL))
{
if(TRUE == configFileIsNotes(buf))
{
memset(buf,0,sizeof(buf));
continue;
}
cpValuePtr = buf;
cpNamePtr = strsep(&cpValuePtr,"=");
if((cpNamePtr != NULL) && (cpValuePtr != NULL))
{
configFileDelLeftTrim(cpNamePtr);
configFileDelRightTrim(cpNamePtr);
//此处由于value本身不是null所以应该第一次返回不为null(肯定)
cpValuePtr = strsep(&cpValuePtr,"#");
configFileDelLeftTrim(cpValuePtr);
configFileDelRightTrim(cpValuePtr);
if(strcmp(cpNamePtr,cpName) == 0)
{
snprintf(cpValue,iValueLen,"%s",cpValuePtr);
printf("configfile:%s readname:%s value:%s\n",confFile,cpName,cpValue);
fclose(fp);
return 0;
}
}
memset(buf,0,sizeof(buf));
}
fclose(fp);
printf("configfile:%s readname:%s value:%s\n",confFile,cpName,cpValue);
return -1;
}
/***********************************************************************
* 函数名 :configFileIntGet
* 功能描述 :
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
int configFileIntGet(char *confFile,char *cpName,int *iValue)
{
char buf[64];
int ret = 0;
memset(buf,0,sizeof(buf));
ret = configFileStrGet(confFile,cpName,buf,sizeof(buf));
if(ret != 0)
{
return -1;
}
*iValue = atoi(buf);
return 0;
}
/***********************************************************************
* 函数名 :configFileStrSet
* 功能描述 :
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
int configFileStrSet(char *confFile,char *cpName,char *cpValue)
{
FILE *fp = NULL;
char buf[512];
char srcBuf[512];
char configTempFile[1024];
char *cpValueStr = NULL;
char *cpNamePtr = NULL;
int fd;
int findName = FALSE;
if(confFile == NULL || cpName == NULL || cpValue == NULL)
{
return -1;
}
if((fp = fopen(confFile,"r")) == NULL)
{
printf("configFile %s open failed\r\n",confFile);
return -1;
}
memset(configTempFile,0,sizeof(configTempFile));
sprintf(configTempFile,"%s.tmp",confFile);
fd = open(configTempFile,O_CREAT | O_RDWR,0777);
if(fd < 0)
{
printf("open file %s failed\r\n",configTempFile);
return -1;
}
memset(buf,0,sizeof(buf));
while((0 == feof(fp)) && (fgets(buf,sizeof(buf),fp) != NULL))
{
if(TRUE == configFileIsNotes(buf))
{
memset(buf,0,sizeof(buf));
continue;
}
cpValueStr = buf;
memset(srcBuf,0,sizeof(srcBuf));
strcpy(srcBuf,buf);
cpNamePtr = strsep(&cpValueStr,"=");
if((cpNamePtr != NULL) && (cpValueStr != NULL))
{
configFileDelLeftTrim(cpNamePtr);
configFileDelRightTrim(cpNamePtr);
if(strcmp(cpNamePtr,cpName) == 0)
{
memset(srcBuf,0,sizeof(srcBuf));
sprintf(srcBuf,"%s=%s\n",cpName,cpValue);
findName = TRUE;
}
}
write(fd,srcBuf,strlen(srcBuf));
memset(buf,0,sizeof(buf));
}
if(findName == FALSE)
{
memset(srcBuf,0,sizeof(srcBuf));
sprintf(srcBuf,"%s=%s\n",cpName,cpValue);
write(fd,srcBuf,strlen(srcBuf));
}
close(fd);
fclose(fp);
remove(confFile);
rename(configTempFile,confFile);
printf("configfile:%s writename:%s value:%s\n",confFile,cpName,cpValue);
return 0;
}
/***********************************************************************
* 函数名 :configFileIntSet
* 功能描述 :
* 输入参数 : 无
* 输出参数 : 无
* 返回值 : 无
*/
int configFileIntSet(char *confFile,char *cpName,int iValue)
{
char buf[64];
memset(buf,0,sizeof(buf));
sprintf(buf,"%d",iValue);
return configFileStrSet(confFile,cpName,buf);
}
configfile.h
#ifndef __CONFIG_FILE_H__
#define __CONFIG_FILE_H__
int configFileStrGet(char *confFile,char *cpName,char *cpValue,int iValueLen);
int configFileIntGet(char *confFile,char *cpName,int *iValue);
int configFileStrSet(char *confFile,char *cpName,char *cpValue);
int configFileIntSet(char *confFile,char *cpName,int iValue);
#endif