3599|3

854

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

linux编程(C语言读取配置文件) [复制链接]

linux编程(C语言读取配置文件)
2009年10月31日 星期六 15:49
#include
#include
#include
#include
#include
#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);
}

最新回复

怎么的呢,觉得还好吧,  详情 回复 发表于 2013-5-6 11:44
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

854

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
显示的好糟糕啊

点评

怎么的呢,觉得还好吧,:)  详情 回复 发表于 2013-5-6 11:44
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 

回复

768

帖子

712

TA的资源

纯净的硅(高级)

板凳
 

回复 沙发 Wince.Android 的帖子

怎么的呢,觉得还好吧,

点评

嘿嘿,还行,只是有些他会乱码。  详情 回复 发表于 2013-5-6 12:59
 
 
 

回复

854

帖子

0

TA的资源

五彩晶圆(中级)

4
 
原帖由 苏莎莎 于 2013-5-6 11:44 发表
怎么的呢,觉得还好吧,
嘿嘿,还行,只是有些他会乱码。
 
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表