getopt函数
函数说明
getopt -- 解析命令的可选项
getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下:
对短选项的解析:cmd [-a][-b]
对短选项及短选项的参数解析:cmd [-a a_argument][-b b_argument]
选项a的参数也是可选的情况解析:cmd [-a[a_argument]]
函数原型
#include <unistd.h>
extern char * optarg;
extern int optind, opterr, optopt;
int getopt ( int argc, char * const argv[ ] , const char * optstring) ;
描述:
getopt函数解析命令行参数,argc、argv是调用main函数时传入的参数。传入的’-'开始的字符被解析为选项,getopt一次执行解析出一个option,如果循环执行,可以将argv中的全部option解析出来;
在getopt的执行中,每次进入都会更新optind变量,该变量指向下一个argv参数;
如getopt返回-1,表示argv[]中的所有选项被解析出,optind指向第一个非选项的argument元素;这里要注意,在getopt执行过程中会将单独的argument交换到argv数组的后面,option选项提前,如:cmd -a file1 -b file2,如果a/b均为不带参数的选项,这最终argv数组变为:cmd -a -b file1 file2;
optstring指定选项合法的选项,一个字符代表一个选项,在字符后面加一个’:‘表示该选项带一个参数,字符后带两个’:'表示该选项带可选参数(参数可有可无),若有参数,optarg指向该该参数,否则optarg为0;
前面说了getopt会进行argv顺序的调整,但也可以通过设置optstring改变它的方式,这里有两种:
如果optstring的第一个参数是’+'或者POSIXLY_CORRECT被设置,则getopt在原argv的顺序上遇到第一个非选项就返回-1;
如果optstring的第一个参数是’-’,则会将所有的非选项当选项处理,并且返回1,用字符代码1表示该选项;