• getopt()函数


    头文件:

    #include<unistd.h>

    函数定义:

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

    参数说明:

    argc、argv: 由main函数参数直接传递过来。

    optstring:    是一个包含合法选项字符的字符串。

    如果字符后跟一个冒号,则要求该选项有参数。在argv中以“-”开头的都视为1选项,“- ”后的字符是选项字符。

    补充说明:

    getopt会返回在argv中的选项字符,此字符会对于optstring中的字符。如果getopt重复调用,它将返回下一个选项字符。如果不再有可识别的选项字符,则返回-1.

    如果getopt找到另一个选项支付,则返回该字符,更新外部变量optind和静态变量nextchar,以便下次调用getopt可以重复实验接下来的选项字符。如果成功找到选项,getopt返回该选项字符。

    如果所有命令行选项已被解析,getopt返回-1,如果getopt遇到一个选项字符不在optstring中,那么将返回“?”。

    如果getopt遇到一个缺少参数的选项,则返回值取决于optstring中的第一个字符,如果是冒号,则返回“:”,返回返回“?”。

    默认情况下,getopt会调换argv中的内容,将非选项放在最后。这样当getopts读取完所有的选项之后,optid会指向非选项的参数。

    在处理选项列表时,getopt可以检测到两种错误

    1.一个选项字符在optstring中并没有指定;

    2.缺少选项参数。默认情况下,getopt在标准错误上输出错误信息,将错误的选项字符放在optopt中,并返回“?”作为函数结果。如果调用者将全局变量opterr设置为0,那么getopt不会输出错误信息(默认情况下,opterr是一个非零值)。如果optstring中的第一个字符是冒号“:”,那时getopt同样不会打印错误。另外getopt将返回“:”代替“?”以表示缺少选项参数。

    getopt()所设置的全局变量包括:

    1.char *optarg:当前选项参数;

    2.int optind:  是argv中要处理的下一个元素的索引。系统初始化此值为1,调用者可以将其重置为1以重新开始扫描相同的argv,或扫描一个新的参数向量。每次调用getopt时,optind保持参数个数在argv中的所有(index)。如果找到一个选项,getopt会返回找到的选项的字符,更新optind。如果选项有参数,将参数存到optarg,否则optarg为0.

    3.int opterr:这个变量为非零时, getopt为无效选项或缺少参数选项输出错误信息。

    4.int optopt:当发现无效选项字符时,getopt返回”?”或“:”字符,并且optopt包含了所发现的无效选项字符。

    getopt定义分为三种:

    1.不带参数的选项;

    2.必须带参数的选项,在选项后面加一个冒号。

    3.可选参数的选项:在选项后加两个冒号。

    注意事项:

    1.不带参数的选项可以连写。

    2.选项部分先后顺序。

    3.可选参数的选项与参数之间不能有空格。

    实例:

    /*
    getopt.c
    */
    #include<stdio.h>
    #include<unistd.h>
    
    int main(int argc, char **argv)
    {
        int ch;
        opterr = 0;
        while((ch = getopt(argc, argv, "a:bcde")) != -1)
        {
            switch(ch)
            {
                case 'a':
                    printf("option a : '%s'
    ", optarg);
                    break;
                case 'b':
                    printf("option b:b
    ");
                    break;
                default:
                    printf("other option : %c
    ", ch);
            }
            printf("option + %c
    ", optopt);
    
        }
        return 0;
    }

    实验结果

  • 相关阅读:
    树莓派3(Raspbain系统)安装.net环境
    CSS3实现鼠标悬停扩展效果
    WINIO64位模拟键鼠操作
    json在线校验
    阿里云ali-oss图片增加水印
    babel使用中不想使用 严格模式 如何去除?
    记录移动端html界面中底部输入框触发焦点时键盘会把输入框遮挡的问题
    nodejs 项目,请求返回Invalid Host header问题
    css如何画出类似原生的线条?
    js回到顶部 动画速度 (自己记录)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11943969.html
Copyright © 2020-2023  润新知