Linux函数学习:getopt、getopt_long、getopt_long_only。

简介:这几个函数是对类似于main函数那样传进来的参数进行解析。
参数的指定由-key value -key --key value --key -key value1 value2 这几种类型,其中getopt可以解决前两种类型,getopt_long能够解决所有类型的参数解析,getopt_long_only类似于getopt_long,可以处理所有选项。具体细节再后面的部分进行介绍。

首先介绍getopt选项,他是相对比较简单的。
函数原型: int getopt(int argc, char * const argv[],  const char *optstring);
argc和argv就是main函数传进来的参数,在这里就不多说了。
optstring:此参数是指定我们要解析的参数内容。eg:abc:(注,getopt函数只能处理带一个冒号的optstring)
optind:是下一次调用getopt函数应当处理参数的小标,也就是argv要处理参数的下表。
optarg:是带有一个冒号的optstring
opterr:此选项决定是否将错误消息打印到标准错误中,如果是0的话,就不打印错误了。
下面是一个例子和对应的输出。
file
file
接下来讲解getopt_long函数,前面说过,此函数能够处理所有的参数
函数原型: int getopt_long(int argc, char * const argv[],   const char *optstring,   const struct option *longopts, int *longindex);
此函数多了两个参数第一个参数结构如下。

struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
name:此部分代表长选项的名称。
has_arg:此结构有几个宏为其赋值。
no_argument(0):代表没有对应的值
required_argument(1) :代表一定需要一个值。
optional_argument(2):代表有没有对应的值都可以。
flag:如果此选项不为空的话,那么将参数对应的val赋值给flag,否则返回。
val:就是我们要返回后者付给flag对应的value。
longindex:如果此选项不为空的话,那么它将指向相对于longopts对应的下标。

下面是我给出的一个例子:和一些输出。
file
file
getopt_long_only与上述getopt_long不同之处:前者不管是“-”还是“--”都视为长选项,如果找不到的话,才去短选项哪里查找:
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容