zoukankan      html  css  js  c++  java
  • getopt--parse command line options

    getopt解析命令行选项

    getopt, getopt_long, getopt_long_only, optarg, optind, opterr, optopt - Parse command-line options

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

    其中argc和argv等同于main函数参数。

    命令行选项元素(an option element)一般以-开头,之后的字符就是命令行选项字符(option characters)。重复调用getopt(),可连续得到命令行选项元素中的选项字符。

    optstring是包含选项字符的字符串。若一个字符后面有一个冒号(:),选项需要一个参数(argument),optarg指向选项字符后面的文本(如-oarg,指向arg)或后面的参数(如-o arg,指向arg)。

    optind是下一个要处理的选项元素的索引。系统初始化optind为1,可以reset到1以重新扫描argv。

    若getopt()找到另一个选项字符,返回该选项字符,并同时更新optind和nextchar。

    若没有选项字符了,getopt()返回-1。optind是第一个不是选项元素的argv-element的索引。

    两个冒号表示选项有一个可选的参数,有参数时optarg指向参数,无时为0。

    默认情况下,getopt()打乱argv顺序,如此所有非选项参数都在最后(如gcc foo.c -Wall, foo.c被排到最后)。

    若getopt()不识别选项字符,向stderr打印错误信息,并保存字符到optopt,返回‘?’。程序可以设置opterr为0来阻止错误消息。

    若getopt()找到一个选项字符不在optstring,或选项少参数,返回‘?’,并设置optopt为实际字符。optstring的第一个字符是一个冒号(:),getopt()返回’:'来代替‘?’。

    返回值

    一个选项找到,getopt()返回选项字符。所有选项都解析完后,返回-1。

    若一个选项不在optstring中,返回‘?’。

    若选项少参数,返回值依赖于optstring第一个字符:若第一个字符为‘:’,返回‘:’,否则返回‘?’。

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    int main(int argc, char * argv[])
    {
        int flags, opt;
        int nsecs, tfnd;
    
        nsecs = 0;
        tfnd = 0;
        flags = 0;
    
        while((opt=getopt(argc, argv, "nt:")) != -1){
            switch(opt) {
            case 'n':
                flags = 1;
                break;
            case 't':
                nsecs = atoi(optarg);
                tfnd = 1;
                break;
            default : /* '?' */
                fprintf(stderr, "Usage: %s [-t nsecs] -n name
    ", argv[0]); 
                exit(EXIT_FAILURE);
            }
        }   
        printf("flags=%d; tfnd=%d; optind=%d
    ", flags, tfnd, optind);
    
        if(optind >= argc){
            fprintf(stderr, "Expected argument after options
    ");
            exit(EXIT_FAILURE);
        }
    
        printf("name argument =%s
    ", argv[optind]);
    
        exit(EXIT_SUCCESS);
    }
  • 相关阅读:
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
    18软工实践-团队现场编程实战(抽奖系统)
    Alpha 冲刺 (4/10)
    BETA(4)
    BETA(3)
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/7471328.html
Copyright © 2011-2022 走看看