getopt_long函数基本用法-linux
2013-08-06 13:34
441 查看
一、感性认识:
[c-sharp] view
plaincopy
#include <stdio.h>
#include <getopt.h>
char *
l_opt_arg;
char * const short_options = "nbl:"; //单冒号表示是否带有参数[l带有参数后面加冒号]
struct option long_options[] = {
{ "name", 0, NULL, 'n' },
{ "bf_name", 0, NULL, 'b' },
{ "love", 1, NULL, 'l' },
{ 0, 0, 0, 0},
};
/*
长选项我们用一个option结构体数组表示长选项的信息:
第一项:表示长选项的名字。
第二项:用来决定此长选项是否要带参数。[这里用数值表示]
第三项:我们一般都置为NULL,用来决定getopt_long函数的返回值就是第四个选项的值
第四项:是此长选项相对应的短选项值,因此一旦此函数读到此长选项时,就返回与此长选项相对应的短选项
*/
int main(int argc, char *argv[])
{
int c;
while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
{
switch (c)
{
case 'n':
printf("My name is XL./n");
break;
case 'b':
printf("His name is ST./n");
break;
case 'l':
l_opt_arg = optarg; //optarg代表参数
printf("Our love is %s!/n", l_opt_arg);
break;
}
}
return 0;
}
编译:
[root@localhost liuxltest]# gcc -o getopt getopt.c
运行1:
[root@localhost liuxltest]# ./getopt
-n -b -l
forever(这个是参数)
My name is XL.
His name is ST.
Our love is forever!
运行2:
[root@localhost liuxltest]# ./getopt
-nb -l
forever
My name is XL.
His name is ST.
Our love is forever!
运行3:
[root@localhost liuxltest]# ./getopt
-nbl
forever
My name is XL.
His name is ST.
Our love is forever!
二、概念
getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下:
#include <getopt.h>
int
getopt_long(int
argc, char * const
argv[],
const char *optstring,
const
struct option *longopts,
int *longindex);
说明:
argc和argv通常直接从main()到两个参数传递而来。
optsting
是选项参数组成的字符串,如果该字符串里任一字母后有冒号,那么这个选项就要求有参数。
longopts 是指向数组的指针,这个数组是
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
const char *name:
选项名,前面没有短横线。譬如"help"、"verbose"之类。
int has_arg:
描述长选项是否有选项参数,如果有,是哪种类型的参数,其值见下表:
符号常量
数值
含义
no_argument 0 选项没有参数
required_argument 1 选项需要参数
optional_argument
2 选项参数是可选的
int *flag:
如果该指针为NULL,那么getopt_long返回val字段的值;
如果该指针不为NULL,那么会使得它所指向的结构填入val字段的值,同时getopt_long返回0
int val:
如果flag是NULL,那么val通常是个字符常量,如果短选项和长选项一致,那么该字符就应该与optstring中出现的这个选项的参数相同;
longindex
一般赋为NULL即可;如果没有设置为NULL,那么它就指向一个变量,这个变量会被赋值为寻找到的长选项在longopts中的索引值,这可以用于错误诊断。
几种常用返回值:
1、每次调用该函数,它都会分析一个选项,并且返回它的短选项,如果分析完毕,即已经没有选项了,则会返回-1。
2、如果getopt_long()在分析选项时,遇到一个没有定义过的选项,则返回值为‘?’,此时,程序员可以打印出所定义命令行的使用信息给用户。
3、当处理一个带参数的选项时,全局变量optarg会指向它的参数
4、当函数分析完所有参数时,全局变量optind(into argv)会指向第一‘非选项’的位置
[c-sharp] view
plaincopy
#include <stdio.h>
#include <getopt.h>
char *
l_opt_arg;
char * const short_options = "nbl:"; //单冒号表示是否带有参数[l带有参数后面加冒号]
struct option long_options[] = {
{ "name", 0, NULL, 'n' },
{ "bf_name", 0, NULL, 'b' },
{ "love", 1, NULL, 'l' },
{ 0, 0, 0, 0},
};
/*
长选项我们用一个option结构体数组表示长选项的信息:
第一项:表示长选项的名字。
第二项:用来决定此长选项是否要带参数。[这里用数值表示]
第三项:我们一般都置为NULL,用来决定getopt_long函数的返回值就是第四个选项的值
第四项:是此长选项相对应的短选项值,因此一旦此函数读到此长选项时,就返回与此长选项相对应的短选项
*/
int main(int argc, char *argv[])
{
int c;
while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
{
switch (c)
{
case 'n':
printf("My name is XL./n");
break;
case 'b':
printf("His name is ST./n");
break;
case 'l':
l_opt_arg = optarg; //optarg代表参数
printf("Our love is %s!/n", l_opt_arg);
break;
}
}
return 0;
}
编译:
[root@localhost liuxltest]# gcc -o getopt getopt.c
运行1:
[root@localhost liuxltest]# ./getopt
-n -b -l
forever(这个是参数)
My name is XL.
His name is ST.
Our love is forever!
运行2:
[root@localhost liuxltest]# ./getopt
-nb -l
forever
My name is XL.
His name is ST.
Our love is forever!
运行3:
[root@localhost liuxltest]# ./getopt
-nbl
forever
My name is XL.
His name is ST.
Our love is forever!
二、概念
getopt_long支持长选项的命令行解析,使用man getopt_long,得到其声明如下:
#include <getopt.h>
int
getopt_long(int
argc, char * const
argv[],
const char *optstring,
const
struct option *longopts,
int *longindex);
说明:
argc和argv通常直接从main()到两个参数传递而来。
optsting
是选项参数组成的字符串,如果该字符串里任一字母后有冒号,那么这个选项就要求有参数。
longopts 是指向数组的指针,这个数组是
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
const char *name:
选项名,前面没有短横线。譬如"help"、"verbose"之类。
int has_arg:
描述长选项是否有选项参数,如果有,是哪种类型的参数,其值见下表:
符号常量
数值
含义
no_argument 0 选项没有参数
required_argument 1 选项需要参数
optional_argument
2 选项参数是可选的
int *flag:
如果该指针为NULL,那么getopt_long返回val字段的值;
如果该指针不为NULL,那么会使得它所指向的结构填入val字段的值,同时getopt_long返回0
int val:
如果flag是NULL,那么val通常是个字符常量,如果短选项和长选项一致,那么该字符就应该与optstring中出现的这个选项的参数相同;
longindex
一般赋为NULL即可;如果没有设置为NULL,那么它就指向一个变量,这个变量会被赋值为寻找到的长选项在longopts中的索引值,这可以用于错误诊断。
几种常用返回值:
1、每次调用该函数,它都会分析一个选项,并且返回它的短选项,如果分析完毕,即已经没有选项了,则会返回-1。
2、如果getopt_long()在分析选项时,遇到一个没有定义过的选项,则返回值为‘?’,此时,程序员可以打印出所定义命令行的使用信息给用户。
3、当处理一个带参数的选项时,全局变量optarg会指向它的参数
4、当函数分析完所有参数时,全局变量optind(into argv)会指向第一‘非选项’的位置
相关文章推荐
- [置顶] getopt_long函数基本用法-linux
- Linux函数getopt_long_only的两种用法
- Linux编程里getopt_long_only函数用法详解
- linux中函数getopt_long用法解释
- Linux编程里getopt_long_only函数用法详解
- Linux编程里getopt_long函数用法详解
- Linux中getopt_long_only函数用法详解
- linux 中解析命令行参数 (getopt_long用法)
- linux 中解析命令行参数 (getopt_long用法)
- Linux下命令行程序设计--getopt_long()函数使用说明
- linux不带缓冲的文件操作基本函数及用法示例
- C语言中getopt()和getopt_long()函数的用法
- linux之getopt_long函数解析
- Linux编程里getopt_long_only函数用法详解
- linux 中解析命令行参数 (getopt_ 4000 long用法)
- Linux中getopt()函数用法
- linux 中解析命令行参数 (getopt_long用法)
- linux 中解析命令行参数 (getopt_long用法)【转自:ast_224】
- linux 中解析命令行参数 (getopt_long用法)
- linux 中解析命令行参数 (getopt_long用法)