利用getopt函数对命令行参数进行解析

函数原型:

int getopt (int argc, char *const *argv, const char *options)

外部变量:

extern char *optarg;
extern int optind, opterr, optopt;

参数含义:

  • 命令行参数中以-开头的参数称为选项(option)
  • 参数options指定了合法的命令行选项列表(单字母)
  • 如果某个选项字母用分号:结尾,则表示该选项要求带参数(双冒号::则表示参数可选)
  • 带参数选项的参数可以紧跟选项字母,亦可以用空格隔开
  • 选项参数可选时,该参数必须紧跟选项字母出现,否则optarg将被设置为0(即视为无参)
  • 选项对应的参数将存储在外部变量optarg中(直接指向argv中的相应位置处)
  • 如果getopt遇到非法选项(不在options中)或者本应带参数的选项未带参数,getopt返回,并将optopt设置为该选项字母(若options的首字母为:,此时将返回:而不是 --这可以用于区分前述两种出错情况),此外getopt还将向stderr打印出错信息(将opterr设置为0将阻止输出此错误信息)
  • optind为待处理的下一个选项的索引值,其初始值为1
  • 为了处理任意顺序的选项(调用程序时,各选项极有可能乱序给出),getopt将在扫描命令行选项时,重新排列选项顺序,使得非选项(non-options)参数排在最后
  • getopt的返回值为下一个待处理的选项字母,如果没有更多的选项字母可供处理,则返回-1(此时可能有不止一个非选项参数待处理,最好检查optindargc的值以确定其数量)

参考:


Published: October 24 2014

blog comments powered by Disqus