1.getopt函数
给函数是为了帮助命令开发者以一致的风格来编写命令行选项。
函数原型:int getopt(int argc, char* const argv[], const char* options);
extern int optind,opterr, optopt;
extern void* optarg;
返回值:下一个选项字符,如果所有的选项都被执行了返回-1.
argc和argv是从main函数里面传进来的参数。options是包含命令所支持的选项字符的字符串。
如果字符选项后面有:则说明该命令需要参数,不然选项后面不需要参数。
比如如果命令如下
command [ -a ] [ -u username] [ -z ] filename
字符串如下 “au:z"
getopt函数通常在getopt函数返回-1的循环中使用。每次循环迭代中,函数返回下一个处理选项。
通常是由应用来解析应用中的冲突,函数只负责解析选项并执行标准格式
当getopt遇到无效字符选项的时候,返回的是问题符号而不是字符选项。当字符选项丢失的时候,
返回的也是字符选项,但是如果options第一个字符是:,那么返回的是:。
“- -”字符选项会导致getopt停止执行字符选项并返回-1.这帮助用户来处理以“-”开头的参数,如想删除-bar文件,
不能够使用rm -bar,需要使用rm -- -bar。
此外getopt支持4个外部选项。
optarg:如果选项有一个参数,当getopt在执行option命令时将optarg执行参数字符串。
opterr:当遇到一个选项错误时,getopt默认打印一个错误消息。如果不想要打印,将opterr设置为0.
optind:argv数组里面下一个要执行的字符串。开始为1,optget执行一个参数增加1.
optopt:如果在字符选项执行过程中碰到一个错误。getopt将会吧optopt指向产生错误的选项字符串
函数原型:getopt_long(int argc, char* const argv[], const char* optstring, const struct option* longoptions, int* longindex);
当函数处理短参数比如-f -a的时候方式和getopt一样。
但是该函数可以处理长参数,用法 比如 --help, --force等。这时候返回值和const struct option* longoptions相关。
struct option结构如下:
struct option{
const char* name;
int has_arg;
int *flag;
int val;
}
name:长选项名;
has_arg:no_argument,不需要参数;required_argument:需要参数; optional_argument参数可有可无
flag:如果是NULL,函数返回val,如果不空返回0,并让flag的指向内容设置为val。