getopt,getopt_long函数

来源:互联网 发布:java管理系统有哪些 编辑:程序博客网 时间:2024/06/03 13:59

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指向产生错误的选项字符串


2.getopt_long函数

函数原型: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。