加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

[linux]getopt_long

发布时间:2020-12-14 00:25:31 所属栏目:Linux 来源:网络整理
导读:linux下的命令行参数函数的使用 struct option 成员的解析 //{选项名,是否需要参数,如果是NULL,则getopt_long返回val(通常设定为short option) //如果非NULL,则getopt_long返回0,flag 指向val //{"get",no_argument,method,METHOD_GET},==》 匹配到get

linux下的命令行参数函数的使用

struct option 成员的解析

//{选项名,是否需要参数,如果是NULL,则getopt_long返回val(通常设定为short option)
    //如果非NULL,则getopt_long返回0,flag 指向val 
    //{"get",no_argument,&method,METHOD_GET},==》 匹配到get选项时,getopt_long返回0,method=METHOD_GET
    //}

getopt_long 参数的解析

//912Vfr ?h==> -9 -1 -2 -V -f -r
    //t: p: c:==>-t 100  选项后面要带一个参数
    //如果是字母后面带两个冒号表示选项后面的参数可有可无
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
static void usage(void)
{
    fprintf(stderr,"webbench [option]... URLn"
            "  -f|--force               Don't wait for reply from server.n"
            "  -r|--reload              Send reload request - Pragma: no-cache.n"
            "  -t|--time <sec>          Run benchmark for <sec> seconds. Default 30.n"
            "  -p|--proxy <server:port> Use proxy server for request.n"
            "  -c|--clients <n>         Run <n> HTTP clients at once. Default one.n"
            "  -9|--http09              Use HTTP/0.9 style requests.n"
            "  -1|--http10              Use HTTP/1.0 protocol.n"
            "  -2|--http11              Use HTTP/1.1 protocol.n"
            "  --get                    Use GET request method.n"
            "  --head                   Use HEAD request method.n"
            "  --options                Use OPTIONS request method.n"
            "  --trace                  Use TRACE request method.n"
            "  -?|-h|--help             This information.n"
            "  -V|--version             Display program version.n"
           );
}
/* values */
volatile int timerexpired=0;
int speed=0;
int failed=0;
int bytes=0;

/* globals */
int http10=1; /* 0 - http/0.9,1 - http/1.0,2 - http/1.1 */
/* Allow: GET,HEAD,OPTIONS,TRACE */
#define METHOD_GET 0
#define METHOD_HEAD 1
#define METHOD_OPTIONS 2
#define METHOD_TRACE 3
#define PROGRAM_VERSION "1.5"
int method=METHOD_GET;
int clients=1;
int force=0;
int force_reload=0;
int proxyport=80;
char *proxyhost=NULL;
int benchtime=30;
static const struct option long_options[]=
{
    {"force",&force,1},{"reload",&force_reload,{"time",required_argument,NULL,'t'},{"help",'?'},{"http09",'9'},{"http10",'1'},{"http11",'2'},{"get",{"head",METHOD_HEAD},{"options",METHOD_OPTIONS},{"trace",METHOD_TRACE},{"version",'V'},{"proxy",'p'},{"clients",'c'},{NULL,0}
};
int main(int argc,char *argv[])
{


    if(argc==1)//没有带参数
    {
        usage();
        return 2;
    } 
    int opt;
    int options_index=0;
   
    while((opt=getopt_long(argc,argv,"912Vfrt:p:c:?h",long_options,&options_index))!=EOF )
    {
        switch(opt)
        {
            case  0 : break;
            case 'f': printf("fn");break;
            case 'r': printf("rn");break; 
            case '9': printf("9n");break;
            case '1': printf("1n");break;
            case '2': printf("2n");break;
            case 'V': printf("Vn");exit(0);
            case 't': printf("tn");break;       
            case 'p': 
            printf("pn");break;
            case ':':
            case 'h':
            case '?': usage();return 2;break;
            case 'c': printf("cn");break;
        }
    }


    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读