Unix/Linux程序设计之getopt函数浅谈-创新互联

Linux中getopt函数用法:
    1、函数作用:

成都创新互联公司主要从事网站制作、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务双辽,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

         getop函数用于解析命令行参数的以'-'或者‘--'开头的参数选项,除去'-'或者'--'选项元素
   如果被重复调用,则它将会依次返回每个选项元素中选项字符。
   2、函数原型:


       #include <unistd.h>
    int getopt(int argc, char * const argv[],
                  const char *optstring);
    extern char *optarg;
    extern int optind, opterr, optopt;

 其中几个全局变量的含义:
           extern char *optarg:保存必须接参数的选型元素的参数,
      extern int optind:指示下一个要解析的参数位置,初始值为1,
      extern int opterr:设置为0将不打印错误信息。
      extern int optopt:当发现无效选项字符之时,getopt()函数或返回'?'字符,或返回':'字符,并且optopt包含了所发现的无效选项字符。
   3、函数参数解析:
          a、int argc, char * const argv[],分别存放main函数的参数,
          b、char *optstring需要解析的参数
             1. 单个字符,表示选项,这里一共有t、d、c、h、q五个选项
             2. 单个字符后接一个冒号“:”表示该选项后必须跟一个参数,参数紧跟在选项后或者以空格隔开
             3. 单个字符后跟两个冒号,表示该选项后可以跟一个参数,也可以不跟,如果后边跟一个参数,参数必须紧跟在选项后不能以空格隔开
             4、如果optstring参数的第一个字符是冒号,那么getopt()函数就会保持沉默,并根据错误情况返回不同字符,如下:
         “无效选项” —— getopt()返回'?',并且optopt包含了无效选项字符(这是正常的行为)。
         “缺少选项参数” —— getopt()返回':',如果optstring的第一个字符不是冒号,那么getopt()返回'?',这会使得这种情况不能与无效选项的情况区分开。
   4、返回值:
      如果当前处理的参数为选项参数,且该选项字符串optstring字符串中,即为定义的选项,则返回该选项字符。
      如果当前处理的参数不是选项参数,则optind偏移向下一个参数,直到找到第一个选项参数为止,然后再按之前的描述操作,如果找不到选项参数,说明解析结束,则返回-1
      
   5、测试用例:
      1、最基本用法:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>

int main(int argc,char *argv[])
{
        int oc;          //选项字符
        char *b_opt_arg;        //选项参数字符串
        while((oc = getopt(argc,argv,"ngl:")) != -1)
        {
                switch(oc)
                {
                        case 'n':
                                printf("My name is fengkai\n");
                                break;
                        case 'g':
                                printf("Her name is zhanghaun\n");
                                break;
                        case 'l':
                                b_opt_arg = optarg;
                                printf("Our love is %s\n",b_opt_arg);
                                break;
                }
        }
        return 0;
}

      2、加上“:”后接参数的情况:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>
int main(int argc,char *argv[])
{
        int oc;          //选项字符
        char *b_opt_arg;        //选项参数字符串
        while((oc = getopt(argc,argv,"ngl:")) != -1)
        {
                switch(oc)
                {
                        case 'n':
                                printf("My name is fengkai\n");
                                break;
                        case 'g':
                                printf("Her name is zhanghaun\n");
                                break;
                        case 'l':
                                b_opt_arg = optarg;
                                printf("Our love is %s\n",b_opt_arg);
                                break;
                        case '?':
                                printf("arguement error\n");
                                break;
                }
        }
        return 0;
}

    3、参数开始加上":"根据出错情况返回:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<errno.h>
int main(int argc,char *argv[])
{
        int oc;          //选项字符
        char ec;     //无效的选项字符
        char *b_opt_arg;        //选项参数字符串
        while((oc = getopt(argc,argv,":ngl:")) != -1)
        {
                switch(oc)
                {
                        case 'n':
                                printf("My name is fengkai\n");
                                break;
                        case 'g':
                                printf("Her name is zhanghaun\n");
                                break;
                        case 'l':
                                b_opt_arg = optarg;
                                printf("Our love is %s\n",b_opt_arg);
                                break;
                        case '?':
                                printf("arguement error\n");
                                break;
                        case ':':
                                printf("缺少选项参数!\n");
                                break;
                }
        }
        return 0;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

本文题目:Unix/Linux程序设计之getopt函数浅谈-创新互联
文章URL:https://www.cdcxhl.com/article40/codcho.html

成都网站建设公司_创新互联,为您提供营销型网站建设面包屑导航定制网站网站设计小程序开发软件开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管