• <i id='cpncc'></i>

    1. <acronym id='cpncc'><em id='cpncc'></em><td id='cpncc'><div id='cpncc'></div></td></acronym><address id='cpncc'><big id='cpncc'><big id='cpncc'></big><legend id='cpncc'></legend></big></address>

        <code id='cpncc'><strong id='cpncc'></strong></code>
      1. <span id='cpncc'></span><fieldset id='cpncc'></fieldset>
        <ins id='cpncc'></ins><dl id='cpncc'></dl>

          <i id='cpncc'><div id='cpncc'><ins id='cpncc'></ins></div></i>

          1. <tr id='cpncc'><strong id='cpncc'></strong><small id='cpncc'></small><button id='cpncc'></button><li id='cpncc'><noscript id='cpncc'><big id='cpncc'></big><dt id='cpncc'></dt></noscript></li></tr><ol id='cpncc'><table id='cpncc'><blockquote id='cpncc'><tbody id='cpncc'></tbody></blockquote></table></ol><u id='cpncc'></u><kbd id='cpncc'><kbd id='cpncc'></kbd></kbd>

            linux解析命令行选项getopt_long用法解读

            • 时间:
            • 浏览:18
            • 来源:124软件资讯网

                linux剖析下令行选项getopt_long用法

                在法式中难免需要使用下令行选项 ,可以选择自己剖析下令行选项 ,可是有现成的 ,何须再造轮子  。

                下面先容使用getopt_long剖析下令行选项  。

                法式中主要使用:

                短选项 长选项 是否需要参数 备注

                -v --version 否 查询版本号

                -n --name 是(用户名) 指定使用者

                -d --debug 否 是否已测试

                1、函数出处

                复制代码

                代码如下:

                [cpp]

                #include //getopt_long()头文件位置

                int getopt_long (int ___argc, char *const *___argv,

                const char *__shortopts,

                const struct option *__longopts, int *__longind);

                int getopt_long_only (int ___argc, char *const *___argv,

                const char *__shortopts,

                const struct option *__longopts, int *__longind);

                2、参数先容

                argc argv :直接从main函数通报而来

                shortopts:短选项字符串  。如”n:v" ,这里需要指出的是 ,短选项字符串不需要‘-’  ,而且但选项需要通报参数时  ,在短选项后面加上“:”  。

                longopts:struct option 数组 ,用于存放长选项参数 。

                longind:用于返回长选项在longopts结构体数组中的索引值 ,用于调试  。一样平常置为NULL

                下面先容struct option

                复制代码

                代码如下:

                [cpp]

                struct option

                {

                const char *name;//长选项名

                int has_arg;//是否需要参数

                int *flag;

                int val;

                };

                name:长选项名字

                has_arg:是否需要参数  。值有三种情形

                复制代码

                代码如下:

                [cpp]

                # define no_argument 0 //不需要参数

                # define required_argument 1 //必须指定参数

                # define optional_argument 2 //参数可选

                flag 和val

                flag和val相互依赖  ,主要分两种情形:

                (1)、flag为NULL ,val值用于确定该长选项 ,以是需要为长选项指定唯一的val值 。这里也为长选项和短选项建设了桥梁  。

                (2)、flag不为NULL  ,则将val值存放到flag所指向的存储空间 ,用于标识该长选项泛起过  。

                3、返回值

                法式中使用短选项  ,则返回短选项字符(如‘n')  ,当需要参数是  ,则在返回之前将参数存入到optarg中 。

                法式中使用长选项  ,返回值凭据flag和val确定 。当flag为NULL  ,则返回val值  。以是凭据val值做差别的处置惩罚  ,这也说明晰val必须唯一  。当val值即是短选项值  ,则可以使用短选项剖析函数剖析长选项;当flag不为NULL ,则将val值存入flag所指向的存储空间  ,getopt_long返回0

                泛起未界说的长选项或者短选项  ,getopt_long返回?

                剖析完毕  ,getopt_long返回-1

                4、实例

                理论要与现实相联合

                复制代码

                代码如下:

                [cpp]

                #include

                #include

                #include //getopt_long()头文件位置

                int main(int argc, char** argv)

                {

                const char *optstring="n:v";

                int c,deb,index;

                struct option opts[]={{"username",required_argument,NULL,'n'},

                {"version",no_argument,NULL,'v'},

                {"debug",no_argument,&deb,1},

                {0,0,0,0}};

                while((c=getopt_long(argc,argv,optstring,opts,&index))!=-1)

                {

                switch(c)

                {

                case 'n'://-n 或者 --username 指定用户名

                printf("username is %s\n",optarg);

                break;

                case 'v'://-v 或者--version,输出书本号

                printf("version is 0.0.1 \n");

                break;

                case 0://flag不为NULL

                printf("debug is %d\n",deb);

                break;

                case '?'://选项未界说

                printf("?\n");

                break;

                default:

                printf("c is %d\n",c);

                break;

                }

                }

                return 0;

                }

                运行截图:

                说明一下:getopt_long_only  ,这个函数功效与getopt_long相同 ,只是可以使用’-‘后面跟长选项名  ,如./main -username jackie