小公司研发总监,既当司令也当兵!
分类: linux
2015-05-25 14:59:46
若选项在optstring中,返回选项字符,否则返回-1;与该选项对应的参数保存在变量optarg中
包含在unistd.h,argc和argv与main(int argc, char *argv[])的参数相对应,
optstring是选项字符集,表现为在启动命令行中'-'后面的首个字符,例如:ls -l -a, 'a'和'l'即在optstring中。
optstring的格式规范如下:
1) 单个字符为参数选项
2) 选项字符后面跟':',表示该选项必须具备参数,参数与选项之间以空格分隔,例如:start -f flile
3) 选项字符后面跟'::', 表示该选项必须具备参数,参数紧跟选项,二者连接在一起,此为gnu的扩充,例如:start -ffile
2. int getopt_long(int argc, char * const argv[], const char *optstring, const struct option *longopts, int *longindex);
若选项在optstring中,返回选项字符,否则返回-1;与该选项对应的参数保存在变量optarg中
包含在getopt.h中,getopt_long()可以看成是支持长选项的getopt(),argc和argv与main(int argc, char *argv[])的参数相对应,
长选项是以"--"开头的,举个例子:"-h"与"--help"
20世纪90年代,unix应用程序开始支持长选项,linux是类unix系统,因此兼容长选项
getopt_long()的前3个参数与getopt()相同,第4个参数是指向option结构的数组,option结构被称为“长选项表”。longindex参数如果没有设置为null,那么它就指向一个变量,这个变量会被赋值为寻找到的长选项在longopts中的索引值,这可以用于错误诊断。
option结构在getopt.h中的声明如下:
struct option {
const char *name;
int has_args;
int *flag;
int val;
};
name:选项字符串
has_args:三种参数类型,no_argument表示无参数(0),required_argument表示需要参数(1),optional_argument表示参数可选(2)
flag:如果为null,getopt_long()返回该结构val字段中的数值;如果不为null,getopt_long()会使得它所指向的变量中填入val字段中的数值,并且getopt_long()返回0;通常flag设置为null,val设置为与该长选项对应的短选项
val:发现了长选项时的返回值,或者flag不是null时载入*flag中的值。典型情况下,若flag不是null,那么val是个真/假值,譬如1 或0;另一方面,如果flag是null,那么val通常是字符常量,若长选项与短选项一致,那么该字符常量应该与optstring中出现的这个选项的参数相同。
part2: 使用举例
点击(此处)折叠或打开