2022.12.23 pm

这篇博客介绍了如何解析命令行参数以个性化运行WebServer,包括端口号、日志模式、触发模式等配置。Config类负责设置默认值并解析argv参数,利用getopt()函数分析选项。WebServer类整合了数据库、线程池等资源。
摘要由CSDN通过智能技术生成

【读webserver代码】

命令行解析(Config类):用于个性化运行。可以设置的有如下参数:

端口号(默认9006),日志写入方式(默认同步),触发组合模式(默认listenfd LT + connfd LT),listenfd触发模式(默认LT),connfd触发模式(默认LT),优雅关闭链接(默认不使用),数据库连接池数量(默认8),线程池内的线程数量(默认8),关闭日志(默认不关闭),并发模式(默认proactor)。

在Config类的构造函数中给以上类成员赋默认值。

Config类中有一个解析函数void parse_arg(int argc, char*argv[]); 此处用到int argc, char*argv[]参数,这两个参数是从main函数中传进来的,然后传给该解析函数:config.parse_arg(argc, argv); argc表示命令行总的参数个数,argv[]表示输入的参数(一共argc个参数,第0个参数是程序的全名,后面的参数是用户输入的参数)。在这个函数中循环调用getopt(),该方法是用来分析命令行参数的,由Unix标准库提供,包含在<unistd.h>头文件中。

int getopt(int argc, char * const argv[], const char *optstring);

extern char *optarg;

extern int optind, opterr, optopt;

argc、argv由main函数直接传入,表示参数的数量和参数(字符串变量数组)。
optstring:一个包含正确参数选项的字符串,用于参数的解析。例如 “abc:”,其中 -a,-b 就表示两个普通选项(选项后不带参数),-c 表示一个必须有参数的选项,因为它后面有一个冒号。一个冒号表示选项后必须有参数,没有参数就会报错(中间有无空格都行)。如果有两个冒号的话,那么这个参数就是可选参数(中间不能有空格)。

外部变量optarg:如果某个选项有参数,optarg包含当前选项的参数字符串。

getopt()每次调用会逐次返回命令行传入的参数选项。当没有参数选项了的最后一次调用时,getopt()将返回-1。所以根据getopt()的返回值来分别处理各种参数。然后通过atoi(optarg)来把当前选项的参数字符串转化成int类型,赋值给上述Config类中的成员变量。
另外,当解析到一个不在optstring里面的参数,或者一个必须有参数的选项没带参数时,返回?。如果optstring是以:开头时,确值参数的情况下会返回:而不是?。

创建WebServer类对象server,此处WebServer类把一些基本信息、数据库、线程池、epoll事件、定时器等全部封装起来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值