1.#include <stdio.h>

2.#include <unistd.h>

3.#include <fcntl.h>

4.#include <string.h>

5.#include <malloc.h>

6.#include <stdlib.h> 

7.

8.

9.typedef struct item_t {

10.    char *key;

11.    char *value;

12.}ITEM;

13.

14./*

15. *去除字符串右端空格

16. */

17.char *strtrimr(char *pstr)

18.{

19.    int i;

20.    i = strlen(pstr) - 1;

21.    while (isspace(pstr[i]) && (i >= 0))

22.        pstr[i--] = '\0';

23.    return pstr;

24.}

25./*

26. *去除字符串左端空格

27. */

28.char *strtriml(char *pstr)

29.{

30.    int i = 0,j;

31.    j = strlen(pstr) - 1;

32.    while (isspace(pstr[i]) && (i <= j))

33.        i++;

34.    if (0<i)

35.        strcpy(pstr, &pstr[i]);

36.    return pstr;

37.}

38./*

39. *去除字符串两端空格

40. */

41.char *strtrim(char *pstr)

42.{

43.    char *p;

44.    p = strtrimr(pstr);

45.    return strtriml(p);

46.}

47.

48.

49./*

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

51. *line--从配置文件读出的一行

52. */

53.int get_item_from_line(char *line, struct item_t *item)

54.{

55.    char *p = strtrim(line);

56.    int len = strlen(p);

57.    if(len <= 0){

58.        return 1;//空行

59.    }

60.    else if(p[0]=='#'){

61.        return 2;

62.    }else{

63.        char *p2 = strchr(p, '=');

64.        *p2++ = '\0';

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

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

67.        strcpy(item->key,p);

68.        strcpy(item->value,p2);

69.

70.        }

71.    return 0;//查询成功

72.}

73.

74.int file_to_items(const char *file, struct item_t *items, int *num)

75.{

76.    char line[1024];

77.    FILE *fp;

78.    fp = fopen(file,"r");

79.    if(fp == NULL)

80.        return 1;

81.    int i = 0;

82.    while(fgets(line, 1023, fp))

83.    {

84.        char *p = strtrim(line);

85.        int len = strlen(p);

86.        if(len <= 0)

87.        {

88.            continue;

89.        }

90.        else if(p[0]=='#')

91.        {

92.            continue;

93.        }

94.        else

95.        {

96.            char *p2 = strchr(p, '=');

97.            /*这里认为只有key没什么意义*/

98.            if(p2 == NULL)

99.                continue;

100.            *p2++ = '\0';

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

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

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

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

105.

106.            i++;

107.        }

108.    }

109.    (*num) = i;

110.    fclose(fp);

111.    return 0;

112.}

113.

114./*

115. *读取value

116. */

117.int read_conf_value(const char *key,char *value1,const char *file)

118.{

119.    char line[1024];

120.    char *key1,*key3,*key2;

121.    FILE *fp;

122.    fp = fopen(file,"r");

123.    if(fp == NULL)

124.        return 1;//文件打开错误

125.    while (fgets(line, 1023, fp)){

126.        ITEM item;

127.        get_item_from_line(line,&item);

128.        if(!strcmp(item.key,key)){

129.

130.            strcpy(value1,item.value);

131.            fclose(fp);

132.            free(item.key);

133.            free(item.value);

134.            break;

135.        }

136.    }

137.    return 0;//成功

138.

139.}

140.int write_conf_value(const char *key,char *value,const char *file)

141.{

142.    ITEM items[20];// 假定配置项最多有20个

143.    int num;//存储从文件读取的有效数目

144.    file_to_items(file, items, &num);

145.

146.    int i=0;

147.    //查找要修改的项

148.    for(i=0;i<num;i++){

149.        if(!strcmp(items[i].key, key)){

150.            items[i].value = value;

151.            break;

152.        }

153.    }

154.

155.    // 更新配置文件,应该有备份,下面的操作会将文件内容清除

156.    FILE *fp;

157.    fp = fopen(file, "w");

158.    if(fp == NULL)

159.        return 1;

160.

161.    i=0;

162.    for(i=0;i<num;i++){

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

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

165.    }

166.    fclose(fp);

167.    //清除工作

168. /*i=0;

169.    for(i=0;i<num;i++){

170.        free(items[i].key);

171.        free(items[i].value);

172.    }*/

173.

174.    return 0;

175.

176.}

177.

178.void main(void)

179.{

180.    char *key;

181.    char *value=NULL,*value1=NULL;

182.    char *file;

183.    file="/home/wangwei/ww/file/from_file";

184.

185.    key="IP";

186.    value=(char *)malloc(sizeof(char)*30);

187.    value1=(char *)malloc(sizeof(char)*30);

188.    read_conf_value(key,value,file);

189.    printf("IP = %s\n",value);

190.

191.    key="MASK";

192.    read_conf_value(key,value,file);

193.    printf("MASK = %s\n",value);

194.

195.    key="GATEWAY";

196.    read_conf_value(key,value,file);

197.    printf("GATEWAY = %s\n",value);

198.    free(value);

199.    free(value1);

200.    value=NULL;

201.    value1=NULL;

202.}

  

posted on 2013-05-09 18:05  夜&枫  阅读(12264)  评论(0编辑  收藏  举报