整理自网络
来源:http://blog.csdn.net/oyd/article/details/5005735
读取一个文件,类似IP=192.168.1.8NETMASK=255.255.255.0格式的文件,并对文件进行解析,得到其key和value,可以读取相应key的value值,也可以得到配置相应的value;
typedef struct item_t { char *key; char *value;}ITEM;/* *去除字符串右端空格 */char *strtrimr(char *pstr){ int i; i = strlen(pstr) - 1; while (isspace(pstr[i]) && (i >= 0)) pstr[i--] = '\0'; return pstr;}/* *去除字符串左端空格 */char *strtriml(char *pstr){ int i = 0,j; j = strlen(pstr) - 1; while (isspace(pstr[i]) && (i <= j)) i++; if (0<i) strcpy(pstr, &pstr[i]); return pstr;}/* *去除字符串两端空格 */char *strtrim(char *pstr){ char *p; p = strtrimr(pstr); return strtriml(p);}/* *从配置文件的一行读出key或value,返回item指针 *line--从配置文件读出的一行 */int get_item_from_line(char *line, out ITEM *item){ char *p = strtrim(line); int len = strlen(p); if(len <= 0){ return 1;//空行 } else if(p[0]=='#'){ return 2; }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); } return 0;//查询成功}int file_to_items(const char *file, out ITEM *items, out int *num){ char line[1024]; FILE *fp; fp = fopen(file,"r"); if(fp == NULL) return 1; int i = 0; while(fgets(line, 1023, fp)){ char *p = strtrim(line); int len = strlen(p); if(len <= 0){ continue; } else if(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); return 0;}/* *读取value */int read_conf_value(const char *key,out char *value,const char *file){ char line[1024]; FILE *fp; fp = fopen(file,"r"); if(fp == NULL) return 1;//文件打开错误 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; } } return 0;//成功}int write_conf_value(const char *key,char *value,const char *file){ ITEM items[20];// 假定配置项最多有20个 int num;//存储从文件读取的有效数目 file_to_items(file, items, &num); int i=0; //查找要修改的项 for(i=0;i<num;i++){ if(!strcmp(items[i].key, key)){ items[i].value = value; break; } } // 更新配置文件,应该有备份,下面的操作会将文件内容清除 FILE *fp; fp = fopen(file, "w"); if(fp == NULL) return 1; i=0; for(i=0;i<num;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<num;i++){ free(items[i].key); free(items[i].value); }*/ return 0;}
影子依旧可以相亲相爱。哪一块骨骼最温暖,总能一击即中。
相关文章:
你感兴趣的文章:
- CSS中多个div盒子并排同行显示的实例代码分享
- C语言版学生成绩管理系统
- 淘宝开个充值店是否赚钱?如何做?
- 小米3使用技巧汇总
- css3怎样实现左右伸缩动画效果
- 接触器的触头接触不牢靠的原因及处理方法