getopt函数分析命令行参数
2018-01-22 11:21
218 查看
函数声明
int getopt(int argc,char * const argv[ ],const char * optstring);
函数说明
getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和内容。参数
optstring则代表欲处理的选项字符串。此函数会返回在argv中下一个的选项字母,此字母会对应参数optstring中的字母。如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg即会指向此额外参数。如果getopt()找不到符合的参数,则会打印出错信息,并将全域变量optarg设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
返回值
getopt()每次调用会逐次返回命令行传入的参数。当没有参数的最后的一次调用时,getopt()将返回-1。
当解析到一个不在optstring里面的参数,或者一个必选值参数不带值时,返回’?’。
当optstring是以’:’开头时,缺值参数的情况下会返回’:’,而不是’?’ 。
全局变量
char *optarg——当前选项参数字符串(如果有)。
int optind——argv的当前索引值。当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到。
int opterr——这个变量非零时,getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。
int optopt——当发现无效选项字符之时,getopt()函数或返回’?’字符,或返回’:’字符,并且optopt包含了所发现的无效选项字符。
参数列表的定义
getopt()使用optstring所指的字串作为短参数列表,像ab:c::d就是一个短参数列表。短参数的定义是一个-后面跟一个字母或数字,像-a,-b就是一个短参数。每个数字或字母定义一个参数。
其中短参数在getopt定义里分为三种:
不带值的参数,它的定义即是参数本身。
必须带值的参数,它的定义是在参数本身后面再加一个冒号。
可选值的参数,它的定义是在参数本身后面加两个冒号 。
注意
参数的值与参数之间不能有空格,否则解析出错。不带值的参数可以连写,也可以分开写。
参数不分先后顺序。
实例
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> extern char* optarg; /*指向当前getopt()返回选项的参数(如果有)*/ extern int optopt; /*当选项没有出现在optstring中,或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回'?’*/ extern int opterr; /*用于控制getopt()是否打印出错信息*/ extern int optind; /*当前getopt()返回选项的下一个选项的索引(argv数组)*/ int main(int argc, char* argv[]) { int opt = 0; opterr = 0; /*不要打印出错信息*/ while((opt = getopt(argc, argv, "ab:c::d")) != -1) { switch (opt) { case 'a': //该选项不需要带参数 printf("选项:a,下一个选项:%s\n", argv[optind]); break; case 'b': //该选项必须带参数 printf("选项:b,带的参数:%s\n", optarg); break; case 'c': //该选项带的参数可选 printf("选项:c,带的参数:%s\n", optarg); break; case 'd': //该选项不需要带参数 printf("选项:d\n"); break; case '?': //选项列表中没有的,并保存在optopt中 printf("不知道的选项:%c\n", optopt); break; default: break; } } return 0; }
运行结果
root@Qt:/home/user/share# ./a.out -acd 选项:a,下一个选项:-acd 选项:c,带的参数:d root@Qt:/home/user/share# root@Qt:/home/user/share# ./a.out -a -bABC -c 选项:a,下一个选项:-bABC 选项:b,带的参数:ABC 选项:c,带的参数:(null) root@Qt:/home/user/share# root@Qt:/home/user/share# ./a.out -c123456 -k 选项:c,带的参数:123456 不知道的选项:k root@Qt:/home/user/share# ./a.out -a kill -c123456 -k 选项:a,下一个选项:kill 选项:c,带的参数:123456 不知道的选项:k root@Qt:/home/user/share#
相关文章推荐
- getopt函数的使用——分析命令行参数
- C/C++—— 分析命令行参数的getopt()函数使用介绍
- 函数说明 getopt()用来分析命令行参数
- getopt--命令行参数分析函数
- getopt()函数:分析命令行参数
- getopt()函数(分析命令行参数)
- linux getopt函数详细分析
- getopt(分析命令行参数)
- getopt(分析命令行参数)
- 读取命令行参数的getopt()函数
- getopt(分析命令行参数)
- getopt(分析命令行参数)
- getopt(分析命令行参数)
- 分析命令行参数——getopt
- 命令行参数选项处理:getopt()及getopt_long()函数使用
- getopt(分析命令行参数)
- getopt(分析命令行参数)
- getopt_long函数解析命令行参数
- getopt 函数分析
- getopt(分析命令行参数