1.getopt函数;
头文件:unistd.h
函数原型:int getopt(int argc, char* const argv[], const char *optstring);
参数介绍:
第一个参数:argc 是main函数的参数总数;
第二个参数:argv是main函数的参数数组;
第三个参数:optstring 是带 选项字符 的字符串,如果选项字符后面跟的是冒号 " : ",那么要求该选项带一个参数,getopt 用 optarg 指向argv元素的下一个文本来表示这个参数;
(意思也就是用选项来接收参数)
返回值:如果所有 命令行参数(选项参数) 解析完毕,则 getopt() 返回-1;
//注释:调用 getopt 的时候,默认会扫描 argv 的元素,所以非选项元素会被放置在最后
注意理解:选项元素、选项字符、选项参数;
getopt 函数外部有四个变量 与其相关;
1.optind argv 中下一个要处理的元素,初值为第一个元素,即1;
2.optarg 指向选项参数;
3.optopt 如果选项未识别(也就是没有识别到参数),用它存放并向标准输出打印错误消息;
4.opterr 将其设置为0,可以组织打印错误消息;
变量介绍:
OPTIND,代表下一个要处理的元素位置。OPTIND是一个特殊的变量,它的初始值是1,每次getopts处理完一个命令参数后就递增它,
2.getopt_long()
头文件:getopt.h。
函数功能:解析命令行长选项,getopt() 可以解析以 - 开头的选项,而 getopt_long() 可以解析以 -- 开头的选项;
意思也就是这里用长选项 --a value_a 来接收参数;
函数原型:int getopt_long(int argc, char* const argv[], const char *optstring, const struct option *longopts, int *longindex);
参数介绍:
第一个参数:argc是 main 函数的参数总数;
第二个参数:argv 是 main 函数的参数数组;
第三个参数:是带 选项字符 的字符串,如果程序只接受长选项,将它指定为空字符串 "" (注意不是NULL)
第四个参数:longopts 是指向struct option 数组第一个元素的指针,该数组最后一元素所有成员均是0;
第五个参数:longindex 指向相对于 longopts 的数组下标的变量;
如果:
getopt_long 在 argv 中发现了 optstring 中没有的 选项字符, 则返回 '?' 并赋值给 optopt, 同时将外部变量 optopt 设置为这个缺失的 选项字符;
如果:
选项参数 缺失, 如果 optstring 的第一个字符是冒号 ':' 则返回冒号 ‘:’ 给 opt, 否则返回 '?' 给opt;
最后,当getopt_long()将命令行所有参数全部解析完成后,返回-1,或者一开始没有选项参数,也会返回-1,或者遇到参数不正确的时候,反正就是出现任何错误都会返回-1;
如果看了以上东西没有看懂,就参考网址:https://baike.baidu.com/item/getopt_long/5634851?fr=aladdin
仔细阅读,一定能看懂,因为曾经懂过;
下面是一个案例:
执行结果如下: