初识getopt
1· getopt 在#include
声明如下:
1.int getopt(int argc, char * const argv[], const char *optstring);
argc,argv是main函数传进的参数
argc —参数个数
argv —参数
optstring —由所有合法的“可选字符”所组成的字符串
optstring详解: 常规形式: “ab:c::” 1. 选项后不带 : 表示其后不跟参数 2. 选项后带一个 : 表示其后必须跟一个参数,且参数紧跟在选项后面,或以空格隔开 3. 选项后带两个 : 表示其后必须跟一个参数,且参数必须紧跟选项后 4. 这些选项后的参数的指针会赋给optarg
2· getopt()对错误命令行参数信息的输出
1.这种错误要么是命令行选项无效,要么是缺少选项参数。正常情况下,getopt()会为这两种情况输出自己的出错信息,并且返回’?'。
2.如果不希望输出任何错误信息,或更希望输出自定义的错误信息。可以采用以下两种方法来更改getopt()函数的出错信息输出行为:
1.“无效选项” —— getopt()返回’?',并且optopt包含了无效选项字符。
2.缺少选项参数” —— optstring第一个参数是“:”则返回“:”,否则返回“?”。返回“?”不易和无效选项的情况区分。
optstring第一个字符:
“+” : 遇到非法选项停止
“-” : 每个非选项argv将被处理为一个字符代码1的选项参数
“:” : 判别选项及选项参数,并能屏蔽错误提示
3· getopt设置的四个全局变量
2.extern char *optarg;
optarg ----- 指向当前选项参数(如果有)的指针
3.extern int optind, opterr, optopt;
1.optind------再次调用getopt()时的下一个argv指针的索引号。当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到。
2.opterr------这个变量非零时,向stderr打印错误,默认为1。getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。
3.optopt------最后一个未知选项。当发现无效选项字符之时,getopt()函数或返回’?‘字符,或返回’:'字符,并且optopt包含了所发现的无效选项字符。
4. 常规用法
while((ch = getopt(argc, argv, "ab:c::")) != -1) { opterr = 0; // 不让报错误信息 switch(ch) { case 'a' : break; case 'b' : break; case 'c' : break; default : break; } }
5. 其他说明
getopt
函数说明 getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的。参数 optstring为选项字符串, 告知 getopt()可以处理哪个选项以及哪个选项需要参数,如果选项字符串里的字母后接着冒号“:”,则表示还有相关的参数,全域变量optarg 即会指向此额外参数。如果在处理期间遇到了不符合optstring指定的其他选项getopt()将显示一个错误消息,并将全域变量optopt设为“?”字符,如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
6. Linux法宝
详细说明参考man手册 man 3 getopt