linux编程(C语言读取配置文件)

linux编程(C语言读取配置文件)
2009年10月31日 星期六 15:49

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
#define BUFFSIZE 100
int 
read_cfg(const char *file_name,const char *key,char *value)
{
    
FILE *fd;

fd=fopen(file_name,"r");

if (fd==NULL) return 1;

char item[BUFFSIZE];

memset(item,0,BUFFSIZE);

int index=0;

while(fgets(item,BUFFSIZE,fd)!=EOF)
{
   
   char *temp=item;

   char *analyze=temp;

   if (*temp=='#') continue;
   

   int key_start=0,key_end=0,val_start=0,val_end=0,parse=0,parse_locate=0;

   int flag=1; 
   
   while(temp!=EOF&&*temp!='\0'&&*temp!='\n')

   { 
   
     char find_char=*(temp++);
   
     if   (find_char=='=') 
     {
    parse++;
    
    if (parse==1) parse_locate=flag;
     }
   
     if (find_char!=' '&&!parse) 
     
     {
        if (key_start==0)
       { 
       
     key_start=flag;
       
     if (*temp=='=') key_end=key_start;
       
       } 
     } 
     
     if (find_char!=' '&&!parse&&key_start) 
     
     
     {
    
        key_end=flag;
    

     }

    if (find_char!=' '&&parse==1&&parse_locate!=flag&&!val_start) 
    val_start=flag;   
    
    if (find_char!=' '&&val_start)   
    val_end=flag;

    flag++;

      
   }
       
if (key_start*key_end*val_start*val_end)

{
   int index_tmp;
      
   char * key_tmp,*val_tmp,*key_result,*val_result;

   int key_len=key_end-key_start+1;

   int val_len=val_end-val_start+1;

   key_tmp=(char *)malloc(key_len);

   val_tmp=(char *)malloc(val_len);

   memset(key_tmp,0,key_len); 

   memset(val_tmp,0,val_len); 
    
   key_result=key_tmp;
   
   val_result=val_tmp;
   
   
      
   for(index_tmp=1;(analyze!=NULL)&&*(analyze)!='\n'&&*(analyze)!='\0';index_tmp++)
    {

     if (index_tmp>=key_start&&index_tmp<=key_end)
        *(key_tmp++)=*analyze;
     
     if (index_tmp>=val_start&&index_tmp<=val_end)
        *(val_tmp++)=*analyze;
     
     analyze++;
    }

    if (!strcmp(key,key_result)) 
    { 
    while(val_len--) *(value++)=*(val_result++) ;
   
    *val_result='\0';
         
    fclose(fd);
   
    return 0;
    }
    
    
    
}

}


close(fd);

return 3;
}

int main(int argc,char *argv[])
{
char *key="w";
char *value=(char *)malloc(20);

    memset(value,0,20);
     
   int flag=read_cfg("cfg.txt",key,value);

   if (flag==1) printf("open file error");
   
printf(" filename=%s key=%s, value=%s \n","cfg.txt","test",value);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值