C语言编写读取配置文件程序

该博客介绍了如何使用C语言编写程序来读取配置文件,通过示例展示了如何解析并设置配置项,如路径、忽略属性和限制值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include "readconf.h"

CONFIGURE *GetConfData()
{	
	CONFIGURE *pConf;
	pConf = (CONFIGURE*)malloc(sizeof(CONFIGURE));	
	memset(pConf, 0x0, sizeof(CONFIGURE));
	//InitialConf(pConf);
	if( access("configfile",F_OK)==-1 )  
      return NULL;
	else
	    ReadConf("configfile", pConf);
		
	return pConf;	
}	

int InitialConf(CONFIGURE *pConf)
{
	snprintf(pConf->SampDictPathName, sizeof(pConf->SampDictPathName), "/home/raohl/office/officesrc/sample");
	snprintf(pConf->LogPathName, sizeof(pConf->LogPathName), "/home/raohl/office/scws/libscws/log");
	snprintf(pConf->NewSampleName, sizeof(pConf->NewSampleName), "/home/raohl/office/officesrc/newsamp");
	snprintf(pConf->ScwsDictxdbUtf8, sizeof(pConf->ScwsDictxdbUtf8), "/usr/local/scws/etc/dict_chs_utf8.xdb");
	snprintf(pConf->ScwsRuleIni, sizeof(pConf->ScwsRuleIni), "/usr/local/scws/etc/rules.utf8.ini");
	snprintf(pConf->LogFileName, sizeof(pConf->LogFileName), "scws.log");
  snprintf(pConf->AttrIgnore, sizeof(pConf->AttrIgnore), "~en");
  pConf->SingelSampTlimit=3000;
	return 0;	
}

int ReadConf(char *sFileName, CONFIGURE *pConf)
{
	char sLine[1025], *sTmp;
	FILE *pFile = NULL;
	int n = 0;
	
	pFile = fopen(sFileName, "r");
	if(!pFile)
	{
		printf("can't open the configure file!\n");	
		return 0;
	}
	memset(sLine,0,1025);
	while( fgets(sLine, sizeof(sLine), pFile) )
	{
		sTmp = strchr(sLine, '\r');
		if(!sTmp)
			sTmp = strchr(sLine, '\n');
		if(sTmp)
			*sTmp = 0;
		sTmp = strchr(sLine, '#');
		if(sTmp)
			*sTmp = 0;	
		sTmp = strchr(sLine, '=');
		if(!sTmp)
			continue;
		*sTmp = 0;
		++sTmp;
		
		if(strcasecmp(sLine, "SAMPDICT") == 0)
			snprintf(pConf->SampDictPathName, sizeof(pConf->SampDictPathName), "%s", sTmp);	
				
		else if(strcasecmp(sLine, "LOGFILE") == 0)
			snprintf(pConf->LogFileName, sizeof(pConf->LogFileName), "%s", sTmp);	
		
		else if(strcasecmp(sLine, "LOGPATH") == 0)
		  snprintf(pConf->LogPathName, sizeof(pConf->LogPathName), "%s", sTmp);	
		  
		else if(strcasecmp(sLine, "NEWSAM") == 0)
		  snprintf(pConf->NewSampleName, sizeof(pConf->NewSampleName), "%s", sTmp);	

		else if(strcasecmp(sLine, "DICTXDB_UTF8") == 0)
	    snprintf(pConf->ScwsDictxdbUtf8, sizeof(pConf->ScwsDictxdbUtf8), "%s", sTmp);	

		else if(strcasecmp(sLine, "RULEINI") == 0)
	    snprintf(pConf->ScwsRuleIni, sizeof(pConf->ScwsRuleIni), "%s", sTmp);	
	    
	  else if(strcasecmp(sLine, "ATTR") == 0)
	    snprintf(pConf->AttrIgnore, sizeof(pConf->AttrIgnore), "%s", sTmp);	
	    
	  else if(strcasecmp(sLine, "TLIMIT") == 0)
		{
			n = 0;
			sscanf(sTmp, "%d", &n);
			if(n > 0)
				pConf->SingelSampTlimit = n;		
		}	  
	}	
	fclose(pFile);
	return 0;	
}

int ShowConf(CONFIGURE *pConf)
{
	if (pConf != NULL)
	{
  	printf("SampDictPathName:%s\n",pConf->SampDictPathName);
  	printf("LogPathName:%s\n",pConf->LogPathName);
  	printf("LogFileName:%s\n",pConf->LogFileName);
  	printf("NewSampleName:%s\n",pConf->NewSampleName);
  	printf("ScwsDictxdbUtf8:%s\n",pConf->ScwsDictxdbUtf8);
  	printf("ScwsRuleIni:%s\n",pConf->ScwsRuleIni);
  	printf("AttrIgnore:%s\n",pConf->AttrIgnore);
  	printf("SingelSampTlimit:%d\n",pConf->SingelSampTlimit);
  }
  else
  {
  	printf("CONFIGURE IS NULL!\n");
  }
  return 0;
}

配置文件格式:SAMPDICT=/home/raohl/office/officesrc/sample
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值