利用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(此时可能有不止一个非选项参数待处理,最好检查optind和argc的值以确定其数量)
参考:
- http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt
- http://man7.org/linux/man-pages/man3/getopt.3.html
blog comments powered by Disqus