getopt函数的使用

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。

你可能感兴趣的:(getopt函数的使用)