博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux企业级项目实践之网络爬虫(5)——处理配置文件
阅读量:4972 次
发布时间:2019-06-12

本文共 3668 字,大约阅读时间需要 12 分钟。

配置文件在Linux下使用得非常普遍,但是Linux下没有统一个配置文件标准。

我们把配置文件的规则制定如下:

1、把“#”视作注释开始

2、所有的配置项都都是以键值对的形式出现

3、严格区分大小写

4、允许数据类型为整型的配置项

5、允许数据类型为字符串类型的配置项

6、允许数据类型为逻辑型的配置项,取值为yes或者no。

 

同时我们需要对配置文件做初始化和载入两个操作。

 

代码如下:

/* confparser.c*/ #ifndef CONFPARSER_H#define CONFPARSER_H #include 
using namespace std; #define MAX_CONF_LEN 1024#define CONF_FILE "spider.conf" /* see the spiderq.conf to get meaning foreach member variable below */typedef struct Config { int max_job_num; char *seeds; char *include_prefixes; char *exclude_prefixes; char *logfile; int log_level; int max_depth; int make_hostdir; int stat_interval; char * module_path; vector
modules; vector
accept_types;}; extern Config * initconfig(); extern void loadconfig(Config *conf); #endif
/* confparser.c*/ #include "spider.h"#include "qstring.h"#include "confparser.h" #define INF 0x7FFFFFFF Config * initconfig(){   Config *conf = (Config *)malloc(sizeof(Config));    conf->max_job_num = 10;   conf->seeds = NULL;   conf->include_prefixes = NULL;   conf->exclude_prefixes = NULL;   conf->logfile = NULL;   conf->log_level = 0;   conf->max_depth = INF;   conf->make_hostdir = 0;   conf->module_path = NULL;   conf->stat_interval = 0;   //conf->modules    return conf;} void loadconfig(Config *conf){   FILE *fp = NULL;   char buf[MAX_CONF_LEN+1];   int argc = 0;   char **argv = NULL;   int linenum = 0;   char *line = NULL;   const char *err = NULL;    if ((fp = fopen(CONF_FILE, "r")) == NULL) {       SPIDER_LOG(SPIDER_LEVEL_ERROR, "Can't load conf_file %s",CONF_FILE);          }    while (fgets(buf, MAX_CONF_LEN+1, fp) != NULL) {       linenum++;       line = strim(buf);        if (line[0] == '#' || line[0] == '\0') continue;        argv = strsplit(line, '=', &argc, 1);       if (argc == 2) {           if (strcasecmp(argv[0], "max_job_num") == 0) {                conf->max_job_num =atoi(argv[1]);           } else if (strcasecmp(argv[0], "logfile") == 0) {               conf->logfile =strdup(argv[1]);           } else if (strcasecmp(argv[0], "include_prefixes") == 0) {                conf->include_prefixes =strdup(argv[1]);           } else if (strcasecmp(argv[0], "exclude_prefixes") == 0) {                conf->exclude_prefixes =strdup(argv[1]);           } else if (strcasecmp(argv[0], "seeds") == 0) {                conf->seeds =strdup(argv[1]);           } else if (strcasecmp(argv[0], "module_path") == 0) {                conf->module_path =strdup(argv[1]);           } else if (strcasecmp(argv[0], "load_module") == 0) {               conf->modules.push_back(strdup(argv[1]));           } else if (strcasecmp(argv[0], "log_level") == 0) {                conf->log_level =atoi(argv[1]);           } else if (strcasecmp(argv[0],"max_depth") == 0) {                conf->max_depth =atoi(argv[1]);           } else if (strcasecmp(argv[0], "stat_interval") == 0) {                conf->stat_interval =atoi(argv[1]);           } else if (strcasecmp(argv[0], "make_hostdir") == 0) {                conf->make_hostdir =yesnotoi(argv[1]);           } else if (strcasecmp(argv[0], "accept_types") == 0) {               conf->accept_types.push_back(strdup(argv[1]));            } else {                err = "Unknowndirective"; goto conferr;           }       } else {           err = "directive must be 'key=value'"; goto conferr;       }     }   return; conferr:   SPIDER_LOG(SPIDER_LEVEL_ERROR, "Bad directive in %s[line:%d]%s", CONF_FILE, linenum, err);  }

 

 

转载于:https://www.cnblogs.com/new0801/p/6177006.html

你可能感兴趣的文章
笔记:git基本操作
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>