getopt和getopt_long参数处理
1:getopt函数
getopt主要用于解析程序运行时所带的参数,原型如下:
#include <unistd.h>
int getopt(int argc, char * const argv[],const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
一般的调用方式:
while((c = getopt(argc, argv, "xy:z::")) != -){
switch(c){
case 'x': ... ...
case 'y': ... ...
case 'z': ... ...
case '?': ... ...
... ....
}
}
参数描述:
1:argc和argv就是main函数的两个参数
2:optstring参数是描述可支持选项的字符串,如果某个选项后面需要参数值,则选项后面有一个":"
3:optarg 正如2所述,它指向了当前选项的参数值
4:optind 初始值是1,是下一个要解析的argv数组的索引(因为argv[0]是程序本身的名字,所以从1开始)
5:optopt 初始值为0,当函数解析到不认识的选项时(optstring中未描述的),getopt将会返回字符'?'且将不认识的选项保存在optopt中,并向stderr打印出错信息(也可手动将opterr设置为0就不会打印出来了)
6:opterr 初始值为1,如果当opterr设置为0时,getopt函数不向stderr输出信息
2:getopt_long函数
getopt_long函数是getopt的一类扩展,用于处理长选项的情况(长选项就是选项值不是一个字符而是一个字符串),原型如下:
#include <getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
一般调用方式:
static struct option arg_options[] = {
{"clientid", required_argument, , 'c'},
{"foreground", no_argument, , 'f'},
{"background", no_argument, , 'b'},
{"hostname", required_argument, , 'H'},
{"hostname", required_argument, , 'h'},
{"interface", required_argument, , 'i'},
{"now", no_argument, , 'n'},
{"pidfile", required_argument, , 'p'},
{"quit", no_argument, , 'q'},
{"request", required_argument, , 'r'},
{"script", required_argument, , 's'},
{"version", no_argument, , 'v'},
{"help", no_argument, , '?'},
{, , , }
};
/* get options */
while () {
int option_index = ;
c = getopt_long(argc, argv, "c:fbH:h:i:np:qr:s:v", arg_options, &option_index);
if (c == -) break;
switch(c){
case 'c': ... ...
... ...
}
}
参数描述:
1:argc、argv、optstring和getopt函数是一样的
2:longopts 是一个指向struct option的结构体指针,这个结构体在getopt.h头文件是这样定义的:
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
name: 长选项的名字
has_arg: 有0,1,2三个值分别对应三个宏no_argument,required_argument,optional_argument,分别表示不要参数和需要参数和参数可有可无
flag: 决定了getopt_long函数如何返回,如果flag是NULL,getopt_long将返回val的值,否则将返回0(一般设置为NULL)
val: val值一般是长选项的首字母
3:longindex 如果它不是NULL,它将是当前解析的longopts数组的索引值
注意事项:
1:其它的外部变量如optarg,optopt,opterr等在getopt_long函数中含义不变
2:getopt_long接收参数的格式是"--" 而不是 "-"
3:参数longopts的作用其实是关联短选项和长选项的,所以一个程序的 -c XXX 和 --clientid XXX是同样的效果,只不过长选项提供了更完整的信息给使用者
getopt和getopt_long参数处理的更多相关文章
- 命令行参数处理-getopt()和getopt_long()
在实际编程当中,自己编写代码处理命令行参数是比较麻烦且易出错的.一般我们会直接使用getopt()和getopt_long()函数,下文将介绍具体的使用方法. getopt() getopt()用于处 ...
- 命令行参数解析函数getopt和getopt_long函数【转】
原文地址:http://blog.csdn.net/cashey1991/article/details/7942809 getopt和getopt_long函数 平时在写程序时常常需要对命令行参 ...
- getopt、getopt_long和getopt_long_only
GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符.比如有一个命令: $ myprog -a vv --add -b --file a. ...
- getopt与getopt_long
如何通过命令行,为程序传入参数,可以使用函数getopt与getopt_long. 函数的声明如下: #include <unistd.h> int getopt(int argc, ch ...
- webbench源码学习-->命令行选项解析函数getopt和getopt_long函数
对于webbench这个网站压力测试工具网上介绍的很多,有深度详解剖析的,对于背景就不在提了, 听说最多可以模拟3万个并发连接去测试网站的负载能力,这里主要是学习了一下它的源码,做点 笔记. 官方介绍 ...
- Linux getopt()函数 getopt_long()函数---转
http://hi.baidu.com/scoundrelgg/item/d4083f8412eea05d26ebd97f Linux getopt()函数 getopt_long()函数 get_o ...
- C语言中getopt()和getopt_long()函数的用法
一.参考文章 1.C语言中getopt()和getopt_long()函数的用法 2.linux 中解析命令行参数 (getopt_long用法) 二.调试经验
- python 使用getopt 获取配置参数
在工程中特别是稍微大一点的项目基本上都会用到配置,就会涉及到配置文件的读取,配置参数的读取. 常用的解析配置文件的是configParser,解析命令行参数的则为getopt. getopt的参数可以 ...
- getopt、getopt_long命令参数
参数 optstring为选项字符串.如果选项字符串里的字母后接着冒号":",则表示还有相关的参数 getopt int getopt(int argc, char * const ...
随机推荐
- 关于java中“使用了未经检查或不安全的操作、有关详细信息,请使用 ——Xlint:unchecked重新编译”
今天看<算法 第4版>排序章节时,发现了一个了一个小问题.先贴一下代码: public class Selection{ public static void main(String[]a ...
- 【递归入门】组合+判断素数:dfs(递归)
题目描述 已知 n 个整数b1,b2,…,bn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和. 例如当 n=4,k=3,4 个整数分别为 3,7,12, ...
- centos+nginx+redmine+gitosis安装指南
说明 这篇文章我现在的主要目的是记录自己安装redmine和gitosis的过程,可能写的有些糙,请各位读者见谅.我会在后面的时间里逐渐完善细节.但我想,这已经是网上迄今为止国内最详细的nginx+r ...
- [git] Git in Practice
Work flow with git and github Work with Remotes Check the current status git status Check the latest ...
- 阿里校招内推C++岗位编程题第一题 空格最少的字符串
给定一个字符串S和有效单词的字典D,请确定可以插入到S中的最小空格数,使得最终的字符串完全由D中的有效单词组成.并输出解. 如果没有解则应该输出n/a 例如: 输入: S = “ilikealibab ...
- BZOJ 3924 ZJOI2015 幻想乡战略游戏 树链剖分
题目链接:https://www.luogu.org/problemnew/show/P3345(bzoj权限题) 题意概述:动态维护树的上所有点到这棵树的带权重心的距离和.N,Q<=10000 ...
- 【备忘】mysql常用操作汇总
1.增删改查 // 插入一条数据 insert into tableName values('liu','bei') // 删除一条数据 delete from tableName where las ...
- 常用实例:js格式化手机号为3 4 4形式
如何在填写手机号时将格式转换为3 4 4形式: 一:填写手机号时,在keyup事件中判断长度,符合条件时在值后面插入空格 $('#username').on('keyup',function(e){ ...
- ChromeSwitchySharp代理设置步骤
步骤: 1.新增情景模式配置如下: 2.设置切换规则 3.先“直接连接”进行登录:然后切换到“自动切换模式”访问对应url
- apache 多端口访问 配置
使用本地ip:端口号,或者修改hosts文件+域名的方法来进行本地多站点web调试. 注意这里是用apache 不是iis 1: 安装好AppServ2.5.9软件,官网是:[url]http ...