读取配置文件


       FileName:           read_config_file.h
       Description:         
       Aurthor:              angel
       Date:                 2013/10/22
       Version:             v.1.0
*/
#ifndef READ_CONF_FILE_H
#define READ_CONF_FILE_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
/********************* macro define *****************/
#define Array(x)                     sizeof(x)/sizeof(x[0])
#define MAX_FILE_LINE          128        //配置文件每天行最大长度
#define MAX_PARA_LEN            50      //配置文件参数长度

/********************* data struct define *************/
 typedef struct conf_para
{
    char name[MAX_PARA_LEN];
    char val[MAX_PARA_LEN];
}conf_para_t;

/******************** function define *******************/
char *l_trim(char *szOutput , const char *szInput);
char *r_trim(char *szOutput , const char *szInput);
char *a_trim(char *szOutput , const char *szInput);
int GetConfigFile(char *conf,const char *KeyName,char *KeyVal);

#endif

/*
       FileName:           read_config_file.c
       Description:         
       Aurthor:              angel
       Date:                 2013/10/22
       Version:             v.1.0
*/
#include "read_config_file.h"

/********************* macro define *****************/
/********************* data struct define *************/
/******************** function define ****************/
/**************************************************
     description: 删除字符串左端空格
     return :左端无空格的字符串
***************************************************/
char *l_trim(char *szOutput , const char *szInput)
{
      assert(szInput != NULL);
      assert(szOutput != NULL);
      assert(szOutput != szInput);
while((*szInput != '\0') && (isspace(*szInput)))
{
++szInput;
}
return (strcpy(szOutput,szInput));
}




/**************************************************
     description: 删除字符串右端空格
     return : 右端无空格的字符串
***************************************************/
char *r_trim(char *szOutput , const char *szInput)
{
        char *p = NULL;

        assert(szInput != NULL);
        assert(szOutput != NULL);
        assert(szOutput != szInput);
        strcpy(szOutput,szInput);
for(p = szOutput + strlen(szOutput) - 1;(p >= szOutput) && (isspace(*p));--p)
{
               ;
}
   *(++p) = '\0';
 return (szOutput);
}

/**************************************************
     description: 删除字符串两端空格
     return :两端无空格的字符串
***************************************************/
char *a_trim(char *szOutput , const char *szInput)
{
        assert(szInput != NULL);
        assert(szOutput != NULL);
        assert(szOutput != szInput);

        l_trim(szOutput , szInput);
        r_trim(szOutput , szInput);
return (szOutput);
}

/****************************************************************************
    description: 从conf文件中查找KeyName,结果保存在KeyVal中
                    conf格式: 关键字= 参数(等号两边可以有空格也可以没有)
                    '#'开头的内容为注释内容,不查找
    return :   -1   失败  
                   0   成功
****************************************************************************/
int GetConfigFile(char *conf,const char *KeyName,char *KeyVal)
{
         char buf_i[MAX_FILE_LINE],buf_o[MAX_FILE_LINE];
 char *pos;
 FILE *fp;

if((fp = fopen(conf,"r")) == NULL)
{
             printf("openfile %s error \n",conf);
return (-1);  
}

fseek(fp,0,SEEK_SET);
memset(buf_i,0,sizeof(buf_i));

while(!feof(fp) && (fgets(buf_i,sizeof(buf_i),fp) != NULL))
{
a_trim(buf_o,buf_i);
            
      if(strlen(buf_o) <= 0)  //file is empty
      {
                    continue;
}

if(buf_o[0] == '#')  //skip note message
{
                     continue;
}
       pos = strstr(buf_o,KeyName);//search KeyName in one of the file line
 
       if(pos != NULL)
       {
       pos += strlen(KeyName);
     
      while((*pos != '\0') && ((*pos == ' ') || (*pos == '=')) )
      {
                       pos++;
}


if(strlen(pos) <= 0)
{
        continue;
}
       strcpy(KeyVal,pos);
       }
}

return 0;
}


/******************************** test programe *****************************、
void output_test(void)
{
     int i;
 
    for(i = 0;i < Array(gconf_opts);i++)
    {
       printf("%s = %s \n",gconf_opts[i].name,gconf_opts[i].val);
    }
}

int main(int agrc ,char *argv[])
{
   char buf[128];
   int i;
   
   if(agrc < 2)
   {
      printf("Usage : ./read_config_file ./filename  \n");
      return 1;
   }

   for(i = 0;i < Array(gconf_opts);i++)
   {
GetConfigFile(argv[1],gconf_opts[i].name,gconf_opts[i].val);
   }


   output_test();
   return 0;
}


//配置文件的格式

CGIRoot = ./cgi-bin/
DefaultFile = index.html
DocumentRoot = ./www/
ListenPort = 8090
MaxClient = 5
TimeOut = 6


转载于:https://my.oschina.net/u/1390984/blog/173113

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值