Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21776
  • 博文数量: 17
  • 博客积分: 410
  • 博客等级: 下士
  • 技术积分: 111
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-22 22:04
文章分类

全部博文(17)

文章存档

2011年(17)

我的朋友
最近访客

分类: LINUX

2011-08-04 23:18:21

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        free(items[i].key);
        free(items[i].value);
    }
*/


   
return 0;

}
阅读(180) | 评论(0) | 转发(0) |
0

上一篇:读写配置文件1

下一篇:没有了

给主人留下些什么吧!~~