TinyWebServer项目学习

一、getopt()

函数原型:

#include <unistd.h>
	int getopt(int argc, char * const argv[], const char *optstring);
	extern char *optarg; //选项的参数指针,即可以或者到某个位置的值
	extern int optind,   //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 
    extern int opterr,  //当opterr=0时,getopt不向stderr输出错误信息。
    extern int optopt;  //当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,
    					//该选项存储在optopt中,getopt返回'?’、

字符串optstring:
1.单个字符,表示选项,
2.单个字符后接一个冒号:表示该选项后必须跟一个参数。参数紧跟在选项后或者以空格隔开。该参数的指针赋给optarg。
3 单个字符后跟两个冒号,表示该选项后必须跟一个参数。参数必须紧跟在选项后不能以空格隔开。该参数的指针赋给optarg。

使用:

  1. 如optstring=“ab:c::d::”,命令行为getopt.exe -a -b host -ckeke -d haha
    在这个命令行参数中,-a和-h就是选项元素,去掉’-',a,b,c就是选项。host是b的参数,keke是c的参数。但haha并不是d的参数,因为它们中间有空格隔开。

  2. 还要注意的是默认情况下getopt会重新排列命令行参数的顺序,所以到最后所有不包含选项的命令行参数都排到最后。
    如getopt.exe -a ima -b host -ckeke -d haha, 都最后命令行参数的顺序是: -a -b host -ckeke -d ima haha
    参考文章:
    C语言中getopt()函数的用法

二、config代码理解

1.构造函数

通过构造函数已经完成了初始化操作,所以即使不使用void parse_arg(int argc, char*argv[])也可以

Config::Config(){
    //端口号,默认9006
    PORT = 9006;

    //日志写入方式,默认同步
    LOGWrite = 0;

    //触发组合模式,默认listenfd LT + connfd LT
    TRIGMode = 0;

    //listenfd触发模式,默认LT
    LISTENTrigmode = 0;

    //connfd触发模式,默认LT
    CONNTrigmode = 0;

    //优雅关闭链接,默认不使用
    OPT_LINGER = 0;

    //数据库连接池数量,默认8
    sql_num = 8;

    //线程池内的线程数量,默认8
    thread_num = 8;

    //关闭日志,默认不关闭
    close_log = 0;

    //并发模型,默认是proactor
    actor_model = 0;
}

2.个性化设置

通过void parse_arg(int argc, char*argv[])可以完成一些个性化设置
代码如下(示例):

./server [-p port] [-l LOGWrite] [-m TRIGMode] [-o OPT_LINGER] [-s sql_num] [-t thread_num] [-c close_log] [-a actor_model]

温馨提示:以上参数不是非必须,不用全部使用,根据个人情况搭配选用即可.

-p,自定义端口号
    默认9006
-l,选择日志写入方式,默认同步写入
    0,同步写入
    1,异步写入
-m,listenfd和connfd的模式组合,默认使用LT + LT
    0,表示使用LT + LT
    1,表示使用LT + ET
    2,表示使用ET + LT
    3,表示使用ET + ET
-o,优雅关闭连接,默认不使用
    0,不使用
    1,使用
-s,数据库连接数量
    默认为8
-t,线程数量
    默认为8
-c,关闭日志,默认打开
    0,打开日志
    1,关闭日志
-a,选择反应堆模型,默认Proactor
    0,Proactor模型
    1,Reactor模型

测试示例命令与含义

./server -p 9007 -l 1 -m 0 -o 1 -s 10 -t 10 -c 1 -a 1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值