linux conf文件读写,linux下配置文件的读写

typedefstructitem_t {char*key;char*value;

}ITEM;/**去除字符串右端空格*/char*strtrimr(char*pstr)

{inti;

i=strlen(pstr)-1;while(isspace(pstr[i])&&(i>=0))

pstr[i--]='\0';returnpstr;

}/**去除字符串左端空格*/char*strtriml(char*pstr)

{inti=0,j;

j=strlen(pstr)-1;while(isspace(pstr[i])&&(i<=j))

i++;if(0

strcpy(pstr,&pstr[i]);returnpstr;

}/**去除字符串两端空格*/char*strtrim(char*pstr)

{char*p;

p=strtrimr(pstr);returnstrtriml(p);

}/**从配置文件的一行读出key或value,返回item指针

*line--从配置文件读出的一行*/intget_item_from_line(char*line,outITEM*item)

{char*p=strtrim(line);intlen=strlen(p);if(len<=0){return1;//空行}elseif(p[0]=='#'){return2;

}else{char*p2=strchr(p,'=');*p2++='\0';

item->key=(char*)malloc(strlen(p)+1);

item->value=(char*)malloc(strlen(p2)+1);

strcpy(item->key,p);

strcpy(item->value,p2);

}return0;//查询成功}intfile_to_items(constchar*file,outITEM*items,outint*num)

{charline[1024];

FILE*fp;

fp=fopen(file,"r");if(fp==NULL)return1;inti=0;while(fgets(line,1023, fp)){char*p=strtrim(line);intlen=strlen(p);if(len<=0){continue;

}elseif(p[0]=='#'){continue;

}else{char*p2=strchr(p,'=');/*这里认为只有key没什么意义*/if(p2==NULL)continue;*p2++='\0';

items[i].key=(char*)malloc(strlen(p)+1);

items[i].value=(char*)malloc(strlen(p2)+1);

strcpy(items[i].key,p);

strcpy(items[i].value,p2);

i++;

}

}

(*num)=i;

fclose(fp);return0;

}/**读取value*/intread_conf_value(constchar*key,outchar*value,constchar*file)

{charline[1024];

FILE*fp;

fp=fopen(file,"r");if(fp==NULL)return1;//文件打开错误while(fgets(line,1023, fp)){

ITEM item;

get_item_from_line(line,&item);if(!strcmp(item.key,key)){

strcpy(value,item.value);

fclose(fp);

free(item.key);

free(item.value);break;

}

}return0;//成功}intwrite_conf_value(constchar*key,char*value,constchar*file)

{

ITEM items[20];//假定配置项最多有20个intnum;//存储从文件读取的有效数目file_to_items(file, items,&num);inti=0;//查找要修改的项for(i=0;i

items[i].value=value;break;

}

}//更新配置文件,应该有备份,下面的操作会将文件内容清除FILE*fp;

fp=fopen(file,"w");if(fp==NULL)return1;

i=0;for(i=0;i

fprintf(fp,"%s=%s\n",items[i].key, items[i].value);//printf("%s=%s\n",items[i].key, items[i].value);}

fclose(fp);//清除工作/*i=0;

for(i=0;i

free(items[i].key);

free(items[i].value);

}*/return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值