当前位置: 首页 > 工具软件 > TinyWeb > 使用案例 >

TinyWebServer项目学习

艾跃
2023-12-01

一、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
 类似资料: