Ratel 网络库之配置文件模块设计思路
发布日期:2023-06-18 点击次数:126
[[438245]]
本文转载自微信公众号「畅游码海」,作者CallMeEngineer 。转载本文请联系畅游码海公众号。
配置文件读取思路(CConfig类):
配置文件读取应该在程序的开始进行初始化,从配置文件中读取程序的相关配置和用户自定义的信息。如:程序的进程的启动个数、每个进程应该启动的线程数的个数、程序在Linux中是否以守护进程方式进行启动等。配置文件的设计应该具有美观、整洁等特点。
配置文件
以 '#' 开始的每一行配置应该当作提示内容,在读取时应该直接跳过 当读取到 “[” 符号时,应该进行跳过方便我们对配置文件的分组 其次应该注意到对空格的过滤,防止空格对我们读取进行干扰 配置类的运行思路:CConfig
代码如下(含详细注释):
/* *CConfig.h */ #include<iostream> #include<map> class CConfig { public: //配置文件的路径 CConfig(std::string filename = "test.conf"); ~CConfig(void); //初始化配置 int InitConfig(); //获取配置参数 std::string getParam(std::string param); //设置配置参数 std::string setParam(); private: bool file_isok; //文件是否读取成功 int ParamHandle(std::string strline); //处理每一行的参数 public: std::map<std::string,std::string> paramstore; // 保存所有参数 std::string filename; //文件名 };
/* * CConfig.cpp */ #include "stdafx.h" #include "Config.h" #include<fstream> #include <string> #include<cstring> CConfig::CConfig(std::string filename):file_isok(false) { std::ifstream fp; fp.open(filename.c_str(),std::ios::in); if(fp.is_open()){ //验证文件是否可以打开,并进行标记 file_isok = true; this->filename = filename; } } CConfig::~CConfig(void) { } std::string CConfig::getParam(std::string param){ for(auto pa : paramstore){ if(pa.first == param) return pa.second; } return ""; } int CConfig::InitConfig(){ if(!file_isok)return -1; //初始化失败 std::ifstream fp; fp.open(filename.c_str(), std::ifstream::in); if(!fp){ std::cerr << "文件读取出错" << std::endl; return -1; } char str[100]; while(fp.getline(str,100)){ //读取每一行的配置文件 unsigned int start, end; for(start = 0; start < strlen(str); start++){ if(str[start] == ' '