本文共 2184 字,大约阅读时间需要 7 分钟。
Linux 下命令行参数主要可以通过main函数的参数来传递。如果我想进行更丰富的命令行参数交互的话,可以使用getopt函数。
默认传递命令行参数int main(int argc ,char * argv[]){}
该函数的argc和argv参数通常直接从main()的参数直接传递而来。optstring是选项字母组成的字符串。如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数。
当给定getopt()命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。然后再次调用该函数,它将返回下一个选项,并设置相应的全局变量。如果不再有可识别的选项,将返回 -1,此任务就完成了。#includeint getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, optopt;
全局变量解释
不正确的传递参数在所难免,这种错误要么是命令行选项无效,要么是缺少选项参数。正常情况下,getopt()会为这两种情况输出自己的出错信息,并且返回’?’。
如果我们想自定义出错信息,有俩种做法如果optstring参数的第一个字符是冒号,那么getopt()函数就会保持沉默,并根据错误情况返回不同字符:
在optstring中,:有特殊含义。起始处 :代表的意义如上面第二点,一般把它放在一个字符后面就代表这个字符选项必须带参数, “g : “代表g选项必须带参数。: : 俩个冒号代表这个参数是可选的。
#include#include extern char *optarg;extern int optind, opterr, optopt;int main(int argc ,char * argv[]){ int option; char InValid ; char * opt_arg; while((option = getopt(argc,argv,":ngl:"))!=-1) { switch(option) { case 'n': printf("选项n\n"); break; case 'g': printf("选项g\n"); break; case 'l': opt_arg = optarg; printf("选项l--%s\n",opt_arg); break; case '?': InValid = optopt; printf("非法选项%c",InValid); break; case ':': printf("选项%c缺少参数\n",optopt); break; default: printf("非法解析\n"); } } return 0;}
值得注意的一点,输入的命令行参数必须是 - 开头的参数,并且带参数的选项应该放最后面输入,比如下面这个列子getopt不会吧g当成选项,它会把 g 当成 l 的参数
./a.out -nlg