0X00 函数的作用
用来解析既有选项又有参数的命令行,很多著名的程序都会采用这种结构和switch case语句来组织其主函数,例如tcpdump。
0X01函数的原型
int getopt(int argc,char* const argv[],const char* optstring)
与之相关的几个全局变量
extern char* optarg
extern int optind,opterr,optopt
其中argc argv 为命令行参数,optstring指明能够解析的选项(abc:de表示能够解析abcde这几个选项,c选项后有参数)
返回值为函数识别的当前选项,-1表示无更多选项,?表示未标识的选项,:表示未给出参数
optarg会被系统自动赋为当前选项的参数
optopt会被自动赋值当前未标识的选项
optind为处理参数的位置
opterr在非0时,向屏幕输出错误。
这几个全局变量非常重要,老师说是因为怕参数太多吓到使用者才选择使用了全局变量
0X02getopt_long
函数原型
int getopt_long(int argc, char * const argv[],const char *optstring,const struct option *longopts, int*longindex);
有一些函数的选项为--list等等,这就需要getopt_long 来处理
其原理与getopt类似,只不过加了一个长选项与短选项的一个对应表,是一个结构体数组,其中结构体成员有name:长选项名称,has_arg:又参维0无参为1,flag=null时value存储相应的短选项longindex我感觉一般情况都设为了null。
网友评论