读取配置文件源代码[linux c]

转自:http://gcody.wwww.blog.ccidnet.com/blog-htm-do-showone-uid-36931-type-blog-itemid-114988.html

  自己今天根据项目里的需要编写出来的很简单的函数,读取配置文件的一行内容,配置文件格式为:

 

#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;
}

纯c读写ini配置文件 用c/c++读写ini配置文件有不少第三方的源库,如iniparser、libini、rwini、UltraLightINIParser等,但都不理想,往往代码较大、功能较弱、 接口使用不方便。尤其在大小写处理、前后空格、各种注释、跨平台换行符支持、带引号字符串处理、无section操作、原格式保持等方面存在问题。 现将本人精心制作的ini读写程序源码奉献给大家,纯c编写,简洁好用。支持windows和linux。 主要特点: 1、支持;和#注释符号,支持行尾注释。 2、支持带引号'或"成对匹配的字符串,提取时自动去引号。引号中可带其它引号或;#注释符。 3、支持无section或空section(名称为空)。 4、支持10、16、8进制数,0x头为16进制数,0头为8进制。 5、支持section、key或=号前后带空格。 6、支持\n、\r、\r\n或\n\r换行格式。 7、不区分section、key大小写,但写入时以新串为准,并保持其大小写。 8、新增数据时,若section存在则在该节最后一个有效数据后添加,否则在文件尾部添加。 9、支持指定key所在整行删除,即删除该键值,包括注释。 10、可自动跳过格式错误行,修改时仍然保留。 11、修改时保留原注释:包括整行注释、行尾注释(包括前面空格)。 12、修改时保留原空行。以上三点主要是尽量保留原格式。 不足之处: 1、不支持单key多value(逗号分割),只能一次性提取后自行处理。 2、不支持同名重复section和key。(重复section可视为错误,重复key则可能造成分歧) 3、不能提取所有section或key名称。 使用只需两个文件inirw.h、inirw.c,另有测试程序和工程文件,支持windows和linux
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值