Linux 命令行参数解析
在linux中,经常需要各种命令,通常情况下都会带各种参数,而这些参数是如何解析的呢? 原文地址:https://www.cnblogs.com/NickQ/p/11368656.html 1. getopt()函数getopt()用来解析命令行选项参数的,但是只能解析短选项: -d 100,不能解析长选项:--prefix;其原型: int getopt(int argc,char * const argv[],const char *optstring); argc和argv和main函数的两个参数一致,分别表示命令行参数个数和保存参数的字符串数组;
解析的原则根据函数返回值,循环调用该函数,直至该函数将参数解析完毕(返回值为-1).
另外,在getopt.h中,也定义如下几个全局变量。 char *optarg —— 指向当前选项参数(如果有参数的话)的指针。ps: 当前选项由返回值传递; int optind —— 再次调用 getopt() 时的下一个 argv 指针的索引。 int optopt —— 最后一个未知选项。一般当出现未知选项,或缺少参数时,它就会保存这个未知选项。 int opterr -—— 如果不希望getopt()打印出错信息,则只要将该全局变量opterr设为0即可。 2. getopt_long()函数getopt_long()是在getopt()的基础上的拓展,可以获取长参数,如获取--help这种参数。其原型如下: int getopt_long(int argc,const char *optstring,const struct option *longopts,int *longindex); 同样的,argc和argv和main函数的两个参数一致,分别表示命令行参数个数和保存参数的字符串数组;optstring,是短选项的规则声明;
static struct option longopts[] = { {"help",no_argument,NULL,'h'},{"module",required_argument,'m'},{"set",'s'},{"get",'g'},{"wakelock",'l'},{"wakeunlock",'u'},{0,0} }; 这个option结构体,定义如下: struct option { const char *name;//长选项名 int has_arg;//是否需要参数 int *flag; int val; };
3. getopt_long_only 函数与 getopt_long 函数使用相同的参数表,在功能上基本一致,只是 getopt_long 只将 --name 当作长参数,但 getopt_long_only 会将 --name 和 -name 两种选项都当作长参数来匹配。如果选项 -name 不能在 longopts 中匹配,但能匹配一个短选项,它就会解析为短选项。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |