getopt

分析命令行参数

表头文件

#include <getopt.h>

函数原型

int getopt(int argc, char * const argv[], const char * optstring);
设置的全局变量包括:
extern char* optarg; 保存选项的参数值
extern int optind; 下一个检索的位置
extern int opterr; 是否将错误信息输出到stderr, 0表示不输出
extern int optopt; 当发现无效选项字符之时,getopt()函数或返回’?’字符,或返回’:’字符,并且optopt包含了所发现的无效选项字符

函数说明

getopt() 用于分析命令汗参数。 参数argc和argv 是由main()传递的参数个数和内容。参数opstring 则代表欲处理的选项字符串。 此函数会返回在argv中下一个的选项字母,此字母会对应参数optstring中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果getopt()找不到符合的参数则会印出错信息,并将全域变量optopt设为“?”字符,如果不希望getopt()印出错信息,则只要将全域变量opterr设为0即可

返回值

如果找到符合的参数则返回此参数字母,如果参数不包含在参数optstring 的选项字母则返回“?”字符,分析结束则返回-1。

范例

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int ch;
    opterr = 0;
    while( (ch = getopt(argc, argv, "a:b:c:d:e:")) != -1) {
        switch (ch) {
            case 'a':
            printf("option a :%s\n", optarg);
            break;
            case 'b':
            printf("option b : %s\n", optarg);
            break;
            default:
            printf("other option: %c\n", ch);
        }
    }
    printf("optopt + %c\n", optopt);
}

执行

$ ./getopt -a 123456 -b 3456 -c
option a :123456
option b : 3456
other option: ?
optopt + c
文档更新时间: 2021-03-07 21:30   作者:周国强