本文主要是介绍续getopt函数 谈自己对getopt_long看法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上次说到在getopt函数下对单个字符选项下的参数处理,但是有个局限性,其不能够处理多字符组合的选项。而函数getopt则能够处理这中情况。其头文件于 <getopt——long>
函数定义 int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
前三个函数的参数就不用说了(上一篇getopt中我们已经讲到),而对于处理长字符串的选项,个人感觉其就是对getopt的一种扩展而已,其机制是相同的,。
来解释下后两个参数的意义吧。
const struct option *longopts 所指的是所定义的结构体。其结构体的内容为:
struct option
{const char *name; //自己所定义的长选项型的选项名int has_arg; //这变量是用来规定其选项参数的有无性,其下有三个宏,no_argument: 其为0,表示为选项后面不加参数。required_argument:其为1,表示这个选项后必须有参数。optional_argument:其为2,表示这个选项其后可以跟参数,也可以不跟。这三个宏不是必须用到,可以用其所代表的数字来将其代替。int *flag; //用来与下面的val这个变量配合,从而决定函数的返回值int val; //与flag配合得出返回值}
函数返回值情况:(由flag与val相互决定)
(1) flag为NULL,val值用于确定該长选项,所以需要为长选项指定唯一的val值。 这里也为长选项和短选项建立了桥梁。
(2) flag不为NULL,则将val值存放到flag所指向的存储空間,用与标识长选购出现过。
这里出现了个长选项与短选项这两种说法
短选项: 顾名思义,就是短小参数。它们通常包含一个连字号和一个字母(大写或小写字母)。例如:-s,-h等。
长选项: 包含了两个连字号和一些大小写字母组成的单词。例如,--size,--help等。
而 int *longindex这个参数同住用于对程序中错误的跟踪,在调试时被用的到。一般我们在写程序是常对赋值为NULL;
下面上段测试的小代码
#include <unistd.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>int main(int argc, char *argv[])
{int c;char* const short_options = "wzj";struct option long_options[] ={{ "xiyou", 0, NULL, 'x' },{ "linux", 2, NULL, 'l' },{ "group", 1, NULL, 'g' },{ 0, 0, 0, 0},};while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1){switch (c){case 'x':printf("xiyou ");break;case 'l':printf("linux ");break;case 'g':printf("group %s ", optarg);break;case 'w':printf("fight");break;case 'z':printf("ing");break;case 'j':printf("!!!\n");break;}}return 0;
}
编译:gcc _getopt_long.c -o _getopt_long
执行:./_getopt_long --xiyou --linux --group ! -w -z -j
结果为:
xiyou linux group ! fighting!!!
测试成功
getopt函数的扩展getopt_long,能够同时对长选项与短选项进行处理。
好东西。值得一用。
这篇关于续getopt函数 谈自己对getopt_long看法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!