C语言读取及修改简单配置文件内容

来源:互联网 发布:有什么好玩的游戏知乎 编辑:程序博客网 时间:2024/05/18 03:36

运行环境:ubuntu14.04

此方式适合小的配置文件,不适合大型文件。

假如有文件内容为:
IP=192.168.1.20
MASK=255.255.255.0
DNS=192.168.1.1

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <stdint.h>#define STR_NETWORKCFG_FILE "./net.conf"struct info_t{  char name[20];  char data[60];};/*获取指定字段(name)信息存入result中*/int GetFile_Info(char *name,char *result){  char linebuffer[100] = {0};  char buffer1[100] = {0};  char buffer2[100] = {0};  uint8_t flag = 0;  int buffer_size=0;  FILE *fp = fopen(STR_NETWORKCFG_FILE, "r");  if(fp == NULL)  {      printf("open error");      return 1;  }  while(1)  {      char *ret = fgets(linebuffer, 100, fp);      if(ret == NULL)      {        break;      }      sscanf(linebuffer, "%[^=]=%[^=]", buffer1,buffer2);      if(!strcmp(name, buffer1))      {         buffer_size=strlen(buffer2);         memcpy(result,buffer2,buffer_size);        result[buffer_size-1]='\0';//remove the \n        flag = 1;        break;         }      memset(buffer1,0,sizeof(buffer1));      memset(buffer2,0,sizeof(buffer2));      memset(linebuffer,0,sizeof(linebuffer));  }  fclose(fp);  if(flag != 1)    return 1;  return 0;}/*获取所有文件信息,存入结构体中,遇到需修改的字段,修改后存入结构体,后再全部重新写入保存*/int ChangeFile_Info(char *name,char *writedata){  int i;  uint8_t flag = 0,cnt = 0;  struct info_t info[12];  char linebuffer[256] = {0};  char buffer[80];  FILE *fp = fopen(STR_NETWORKCFG_FILE, "r");  if(fp == NULL)  {      printf("open error");      return 1;  }  for(i = 0 ; i < 12 ; i++)  {    char *ret = fgets(linebuffer, 256, fp);    if(ret == NULL)    {      break;    }    sscanf(linebuffer, "%[^=]=%[^=]", info[i].name,info[i].data);    if(!strcmp(info[i].name, name))    {      memcpy(info[i].data,writedata,strlen(writedata));      info[i].data[strlen(writedata)] = '\n';      info[i].data[strlen(writedata)+1] = '\0';      flag = 1;    }    memset(linebuffer,0,sizeof(linebuffer));    cnt++;  }  fclose(fp);  if(flag)  {    fp = fopen(STR_NETWORKCFG_FILE,"w");    if(fp == NULL)    {        return 1;    }    for(i = 0 ; i < cnt ; i++)    {        memset(buffer,0,sizeof(buffer));        sprintf(buffer,"%s=%s",info[i].name,info[i].data);        fprintf(fp,"%s",buffer);    }    fclose(fp);  }  else    return 1;  return 0;}int main(){    char result[100] = {0};    char *writedata = "192.168.10.33";    GetFile_Info("IP",result);    printf("result:%s\n",result);    ChangeFile_Info("IP",writedata);    GetFile_Info("IP",result);    printf("result:%s\n",result);    return 0;}

代码运行结果:
result:192.168.1.20
result:192.168.10.33
打开文件查看,IP=192.168.10.33