[置顶] getopt_long函数基本用法-linux
一、感性认识:
- #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的更多相关文章
- C语言中getopt()和getopt_long()函数的用法
一.参考文章 1.C语言中getopt()和getopt_long()函数的用法 2.linux 中解析命令行参数 (getopt_long用法) 二.调试经验
- [置顶] access函数-linux
表头文件 #include<unistd.h> 定义函数 int access(const char * pathname, int mode); 函数说明 检查是否可以读/写某一已存在的 ...
- [置顶] getline函数-linux
头文件: #include <stdio.h> 函数: ssize_t getline(char **lineptr, size_t *n, FILE *stream); eg: ssiz ...
- [置顶] mkdir函数-linux
tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial">
- [置顶] 自娱自乐7之Linux UDC驱动2(自编udc驱动,现完成枚举过程,从驱动代码分析枚举过程)
花了半个月,才搞定驱动中的枚举部分,现在说linux的枚举,windows可能有差别. 代码我会贴在后面,现在只是实现枚举,你可能对代码不感兴趣,我就不分析代码了,你可以看看 在<自娱自乐1&g ...
- [置顶] 自娱自乐1之Linux UDC驱动(形式模板)
首先,我不是做驱动的开发人员.所以只能用自娱自乐来表示我的行为. 我不知道udc和gadget驱动是不是冷门的驱动,资料真是不多.我之前买了一本书,上面说到这些,就教你如何调试已写好的驱动.这样也可以 ...
- [置顶] 学习鸟哥的Linux私房菜笔记(6)——过滤器、输入输出及管道
一.过滤器 Linux中的应用工具分为三种: 交互工具 过滤器 编辑器 能够接受数据,过滤再输出的工具,称之为过滤器 对过滤器和进程,存在着输入源与输出对象 二.输入.输出.重定向 输入:过滤器的数据 ...
- [置顶] 自娱自乐6之Linux gadget驱动5(自编gadget驱动,包涵与之通讯的主机usb驱动,已调试通过)
这个代码调试,你首先要保证你的udc驱动没用问题,这个有些矛盾,应为我本来要用gadget驱动来调试udc驱动,结果反过来了. 这是在zero基础改的,大概的改动 1. 去掉loop. 2. sink ...
- freemarker内置函数和用法
原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...
随机推荐
- 用Centos7搭建小微企业Samba文件共享服务器【转】
转自 用Centos7搭建小微企业Samba文件共享服务器 - 今日头条(www.toutiao.com)http://www.toutiao.com/i6436937837660078593/ 最近 ...
- 设计模式之笔记--解释器模式(Interpreter)
解释器模式(Interpreter) 定义 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 类图 描述 Expr ...
- 做php网站后台开发,在Linux系统上进行更好吗?【转载】
1. PHP是开源软件,它在bsd/linux/win下都有很好的正式版及孪生版.并非开发php就必须要在linux下进行.主机服务商们习惯性的把asp与php分为两个主机系列几进行销售.由于asp只 ...
- Django 1.10文档中文版Part3
目录 2.7 第一个Django app,Part 5:测试 2.7.1 自动化测试介绍 2.7.2 基本的测试策略 2.7.3 编写我们的第一个测试程序 2.7.4 测试一个视图 2.7.5 测试越 ...
- C/C++——库函数strcpy和strdup比较
版权声明:原创文章,禁止转载. 1. strcpy 原型: extern char *strcpy(char *dest,char *src); 用法: #include <string.h&g ...
- PDO和mysqli对比
PHP中,如何选择PDO和mysqli呢?本文做个简单的比较 1)总的比较 PDO MYSQLI 数据库支持 12种不同的数据库支持 支持MYSQL API OOP OOP和过程 命名参数 支持 ...
- beego学习笔记(4):开发文档阅读(3)
通过运行 bee new quickstart 来创建新的项目,其结构如下: quickstart |-- conf | `-- app.conf |-- controllers | `-- defa ...
- **CodeIgniter通过hook的方式实现简单的权限控制
根据自己的实际情况,需要两个文件,一个是权限控制类,Acl,另外一个是权限配置的文件acl.php放在了config这个目录下. Acl这个类放在了application/hook/acl.php.通 ...
- 关闭webstorm自动保存,并显示文件未保存标识
1.取消自动保存 2.显示编辑状态设置:
- 【LOJ】 #2011. 「SCOI2015」情报传递
题解 一写过一交A的一道数据结构水题 我们发现大于C可以转化为这条路径上有多少个在某天之前开始调查的情报员,离线全部读入,变成树上路径查询某个区间的数出现过多少次,构建一棵根缀的主席树,查询的时候用两 ...