首页 > 代码库 > 配置文件
配置文件
一个工程项目中,通常会有一个整体的配置文件,比如设置项目日志文件存放地址,日志保留等级,模块存放地址等等。
假设现在有一个配置文件如下:
1 #the process‘s output will be logged in logfile 2 logfile=mylog.log 3 4 #The path where modules will locate 5 module_path=/home/guang/myproject/modules/ 6 7 #Which module to load. Each one a line. 8 module=search 9 module=save
要得到配置文件里面设置的内容,需要对配置文件进行解析,其头文件config.h如下:
1 #include <vector> 2 using namespace std; 3 4 5 #define CONF_FILE "config.conf" 6 7 typedef struct Config{ 8 char *log_file; 9 char *module_path; 10 vector<char *> modules; 11 }Config; 12 13 14 Config *initConfig(); 15 void loadConfig(Config *conf);
config.cpp如下:
1 #include "config.h" 2 //初始化结构体 3 Config *initConfig() 4 { 5 Config *conf = (Config *)malloc(sizeof(Config)) ; 6 7 conf->log_file = NULL; 8 conf->log_level = 0; 9 conf->module_path = NULL; 10 } 11 12 13 //从配置文件中提取配置信息 14 void loadConfig(Config *config) 15 { 16 FILE *fp = NULL; 17 if((fp = fopen(CONF_FILE, "r")) == NULL) 18 { 19 LOG(LEVEL_ERROR, "Can‘t open config file %s", CONF_FILE); 20 } 21 22 char buf[MAX_CONF_LEN]; 23 linenum = 0; 24 char *line = NULL; 25 int argue = 0; 26 char **argv = NULL; 27 const char *err = NULL; 28 while(fgets(buf, MAX_CONF_LEN, fp) != NULL) 29 { 30 linenum++; 31 line = strim(buf); 32 //判断当前行是否是空行或者注释行 33 if(line[0] == ‘#‘ || line[0] == ‘\0‘) 34 continue; 35 36 argv = strsplit(line, ‘=‘, &argc, 1); //按‘=‘进行分割 37 //如果分隔得到的字符串为2 38 if(argc == 2) 39 { 40 if(strcasecmp(argv[0], "log_file") == 0) //strcasecmp是忽略大小写判断两个字符串是否一致 41 config->log_file = strdup(argv[1]); //strdup的作用是拷贝字符串,它会自己申请拷贝字符串大小的内存 42 43 else if(strcasecmp(argv[0], "module_path") == 0) 44 config->module_path = strdup(argv[1]); 45 else if(strcasecmp(argv[0], "module") == 0) 46 config->modules.push_back(strdup(argv[1])); 47 } 48 else { 49 err = "directive must be ‘key=value‘"; 50 goto conferr; 51 } 52 } 53 return; 54 conferr: 55 LOG(LEVEL_ERR, "bad directive in %s[line: %d] %s", CONF_FILE, linenum, err); 56 }
配置文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。