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的话,就不打印错误了。
下面是一个例子和对应的输出。

Linux函数学习:getopt、getopt_long、getopt_long_only。_第1张图片

Linux函数学习:getopt、getopt_long、getopt_long_only。_第2张图片


接下来讲解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对应的下标。

下面是我给出的一个例子:和一些输出。

Linux函数学习:getopt、getopt_long、getopt_long_only。_第3张图片

Linux函数学习:getopt、getopt_long、getopt_long_only。_第4张图片

getopt_long_only与上述getopt_long不同之处:前者不管是“-”还是“--”都视为长选项,如果找不到的话,才去短选项哪里查找:

你可能感兴趣的:(c)