C语言解析命令行函数:getopt系列

头文件:/usr/include/getopt.h

函数传入较长参数

函数getopt_long_onlygetopt_long两者用法差不多,都可以用来解析命令行选项

函数出处
#include  //getopt_long()头文件位置  
int getopt_long (int ___argc, char *const *___argv,  
            const char *__shortopts,  
                const struct option *__longopts, int *__longind);  
int getopt_long_only (int ___argc, char *const *___argv,  
                 const char *__shortopts,  
                     const struct option *__longopts, int *__longind); 
短选项 长选项 是否需要参数
-n –username 是(用户名)
-d –debug
参数
  • argcv,argv :main函数传递的参数

  • shortopts:短项字符串,如"hn:jk:p:s:o:m:ti:va",短项字符串不需要’-‘标记,短选项需要传递参数的时候后面加上’:’

  • longopts,长选项数组,存放长选项参数

    struct longopts{
        const char *name;//长选项名
        int has_arg;//是否需要参数
        int * flag;
        int val;
    };
    
  • longind:于返回长选项在longopts结构体数组中的索引值,用于调试。一般置为NULL

har_arg 选项有三种情况

define no_argument 0 //不需要参数

define required_argument 1 //必须指定参数

define optional_argument 2 //参数可选

flag和val相互依赖,主要有如下情况

  • flag为NULL,val值用于确定该长选项,所以需要为长选项指定唯一的val值。这里也为长选项和短选项建立了桥梁
  • flag不为NULL,则将val值存放到flag所指向的存储空间,用于标识该长选项出现过
返回值
  • 程序中使用短选项,则返回短选项字符(如‘n’),当需要参数是,则在返回之前将参数存入到optarg中
  • 程序中使用长选项,返回值根据flag和val确定。当flag为NULL,则返回val值。所以根据val值做不同的处理,这也说明了val必须唯一。当val值等于短选项值,则可以使用短选项解析函数解析长选项;当flag不为NULL,则将val值存入flag所指向的存储空间,getopt_long返回0
  • 出现未定义的长选项或者短选项,getopt_long返回?
  • 解析完毕,getopt_long返回-1
全局参数:可以用在头文件作用域处
  • extern char * optarg 用于获取以上解析函数识别的参数选项后的数值
  • extern int optind 获取以解析函数执行过程中的剩余参数个数。
  • extern int opterr 解析函数遇到无法解析的命令,会将错误标记0返回至该值
  • extern int optopt为解析函数设置一个未识别的字符选择

你可能感兴趣的:(C语言解析命令行函数:getopt系列)