1-解析命令行参数-ParseArguments

本文介绍了webtest工作的第一步——解析命令行参数。通过`getopt_long`函数初始化选项,包括特殊选项如`-c`和`-p`,并确保URL参数的合法性。在参数解析成功后,检查输入参数的意义,对不合适的值设为默认值。程序提供Usage指南以帮助用户正确使用。
摘要由CSDN通过智能技术生成

Please indicate the source: http://blog.csdn.net/gaoxiangnumber1

Welcome to my github: https://github.com/gaoxiangnumber1

  • webtest工作的第一步是解析命令行参数,对应函数ParseArguments(argc, argv);。该函数主要逻辑有以下4个步骤:
    1. 根据参数个数判断是否合法:至少2个参数./webtest <url>。任何时候,若参数非法,那么向stdout/stderr输出提示信息并终止程序exit(BAD_PARAMETER);
    2. 如果参数个数合法,通过getopt_long函数(man 3 getopt_long)初始化每个选项对应的全局变量。特别的选项:
      (1). -f|--force:表示client与server连接成功(即connect成功),发送成功http request message后,client立刻关闭socket,不读取server的reply,然后进行下一次socket->connect->write->close
      (2). -r|--reload:表示当proxy server存在时,在http request message的header中加入Pragma: no-cache
    3. 解析选项成功后,必须还有一个url参数,否则参数非法。
    4. 如果上述全部成功,检测参数输入是否有意义,比如clients >= 0等等,如果不合适,恢复默认值。
  • 宏定义:将所有函数返回值、支持的http method(共有4种)定义为宏,便于记忆、理解。
// Define return status codes
#define FAIL -1
#define SUCCESS 0
#define SERVER_ERROR 1 // Server is not on-line
#define BAD_PARAMETER 2 // Command-line parameters are bad.
#define INTERNAL_ERROR 3 // pipe() failed, fork() failed

// Support methods: GET, HEAD, OPTIONS, TRACE
#define METHOD_GET 0
#define METHOD_HEAD 1
#define METHOD_OPTIONS 2
#define METHOD_TRACE 3
  • 每个选项对应某些全局变量,都有一个合理的默认值,在解析选项时修改。
// Globals:
int clients = 1; // The number of clients, default 1.
int force = 0; // 1 means Don't wait for reply from server.
char *proxy_host = NULL; // The proxy host name, default NULL.
int proxy_port = 80; // The proxy port number, default 80(http 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值