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