18.3.2 SHTTPD文件配置解析的实现

18.3.2  SHTTPD文件配置解析的实现

服务器SHTTPD配置文件的优先级最高,对其进行解析后的值覆盖其他配置部分的值。单行配置文件的格式为:

 

[[空格]#注释|[空格]关键字[空格]=[空格]value]

 

先获得配置的关键字和值部分,这两个部分是以“=”来分割的,然后根据关键字对其值进行不同的处理。如果一行为“#”开始则为注释行。

 

void Para_FileParse(char *file)

{

#define LINELENGTH 256

    char line[LINELENGTH];

    char *name = NULL, *value = NULL;

    int fd = -1;

    int n = 0;

    fd = open(file, O_RDONLY);

    if(fd == -1)

    {

        goto EXITPara_FileParse;

    }

   

    /*

    *命令格式如下:

    *[#注释|[空格]关键字[空格]=[空格]value]

    */

    while( (n = conf_readline(fd, line, LINELENGTH)) !=0)

    {

        char *pos = line;  

       

        while(isspace(*pos)){                   /*跳过一行开头部分的空格*/

            pos++;

        }

       

        if(*pos == '#'){                        /*注释?*/

            continue;

        }      

       

        name = pos;                             /*关键字开始部分*/

        while(!isspace(*pos) && *pos != '=')     /*关键字的末尾*/

        {

            pos++;

        }

        *pos = '/0';                            /*生成关键字字符串*/

       

        while(isspace(*pos)) {                  /*value部分前面空格*/

            pos++;

        }

       

        value = pos;                            /*value开始*/

        while(!isspace(*pos) && *pos != '/r' && *pos != '/n'){/*到结束*/

            pos++;

        }

        *pos = '/0';                            /*生成值的字符串*/

        /*根据关键字部分,获得value部分的值*/

        int ivalue;

        /*"CGIRoot","DefaultFile","DocumentRoot","ListenPort",
        "MaxClient",    "TimeOut"
*/

        if(strncmp("CGIRoot", name, 7)) {   /*CGIRoot部分*/

            memcpy(conf_para.CGIRoot, value, strlen(value)+1);

        }else if(strncmp("DefaultFile", name, 11)){
                                                /
*DefaultFile部分*/

            memcpy(conf_para.DefaultFile, value, strlen(value)+1);

        }else if(strncmp("DocumentRoot", name, 12)){
                                                /
*DocumentRoot部分*/

            memcpy(conf_para.DocumentRoot, value, strlen(value)+1);

        }else if(strncmp("ListenPort", name, 10)){
                                                /
*ListenPort部分*/

            ivalue = strtol(value, NULL, 10);

            conf_para.ListenPort = ivalue;

        }else if(strncmp("MaxClient", name, 9)){    /*MaxClient部分*/

            ivalue = strtol(value, NULL, 10);

            conf_para.MaxClient = ivalue;

        }else if(strncmp("TimeOut", name, 7)){      /*TimeOut部分*/

            ivalue = strtol(value, NULL, 10);

            conf_para.TimeOut = ivalue;

        }      

    }

    close(fd);

EXITPara_FileParse:

    return;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值