linux c语言配置文件读取和写入简单实现(C代码实现读取配置文件)

 配置文件内容格式:

#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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值