linuxfopen 读取一行_linux读取按行读写文本文件

1.#include

2.#include

3.#include

4.#include

5.#include

6.#include

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值