linux下用c读取ini文件,linux编程(C语言读取配置文件)

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

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值