linux之getopt 函数

命令行参数解析函数 —— getopt()
getopt()函数声明如下:
#include <unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;

该函数的argc和argv参数通常直接从main()的参数直接传递而来。optstring是选项字母组成的字串。如果该字串里的任一字符后面有冒号,那么这个选项就要求有选项参数。
当给定getopt()命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字串 (optstring) 后,getopt() 将返回第一个选项,并设置一些全局变量。使用相同的参数再次调用该函数时,它将返回下一个选项,并设置相应的全局变量。如果不再有可识别的选项,将返回 -1,此任务就完成了。
getopt() 所设置的全局变量包括:
  • char *optarg——当前选项参数字串(如果有)。
  • int optind——argv的当前索引值。当getopt()在while循环中使用时,循环结束后,剩下的字串视为操作数,在argv[optind]至argv[argc-1]中可以找到。
  • int opterr——这个变量非零时,getopt()函数为“无效选项”和“缺少参数选项,并输出其错误信息。
  • int optopt——当发现无效选项字符之时,getopt()函数或返回'?'字符,或返回':'字符,并且optopt包含了所发现的无效选项字符。
以下面的程序为例:
选项:
  • -n —— 显示参数一。
  • -s —— 显示参数二
  • -l —— 显示参数三。
linux之getopt 函数

测试如下:
./a.out -n agrv[1] -s argv[2] -l argv[3]  
运行结果如下:
agrv[1]
return value=110
argv[2]
return value=115
argv[3]
return value=108


特别说明:
while ((iError = getopt(argc, argv, "ls:f:h:d:")) != -1)
这种情况就是l可以不跟参数,即使你跟了参数也不会把参数存放在optarg中,也就是说根当检测到-l时候,你可以用这个选项来处理一些事情,但是你不能使用optarg参数,不然会发生Segmentation fault;
但是如果你使用-s -f -h -d,则-s -f -h -d后面必须跟参数。
上一篇:【Linux设备驱动】--0x02字符设备模块-使用alloc_chrdev_region接口


下一篇:Promise链式调用与升级版