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_argumentrequired_argumentoptional_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参数处理的更多相关文章

  1. 命令行参数处理-getopt()和getopt_long()

    在实际编程当中,自己编写代码处理命令行参数是比较麻烦且易出错的.一般我们会直接使用getopt()和getopt_long()函数,下文将介绍具体的使用方法. getopt() getopt()用于处 ...

  2. 命令行参数解析函数getopt和getopt_long函数【转】

    原文地址:http://blog.csdn.net/cashey1991/article/details/7942809 getopt和getopt_long函数   平时在写程序时常常需要对命令行参 ...

  3. getopt、getopt_long和getopt_long_only

    GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符.比如有一个命令: $ myprog -a vv --add -b --file a. ...

  4. getopt与getopt_long

    如何通过命令行,为程序传入参数,可以使用函数getopt与getopt_long. 函数的声明如下: #include <unistd.h> int getopt(int argc, ch ...

  5. webbench源码学习-->命令行选项解析函数getopt和getopt_long函数

    对于webbench这个网站压力测试工具网上介绍的很多,有深度详解剖析的,对于背景就不在提了, 听说最多可以模拟3万个并发连接去测试网站的负载能力,这里主要是学习了一下它的源码,做点 笔记. 官方介绍 ...

  6. Linux getopt()函数 getopt_long()函数---转

    http://hi.baidu.com/scoundrelgg/item/d4083f8412eea05d26ebd97f Linux getopt()函数 getopt_long()函数 get_o ...

  7. C语言中getopt()和getopt_long()函数的用法

    一.参考文章 1.C语言中getopt()和getopt_long()函数的用法 2.linux 中解析命令行参数 (getopt_long用法) 二.调试经验

  8. python 使用getopt 获取配置参数

    在工程中特别是稍微大一点的项目基本上都会用到配置,就会涉及到配置文件的读取,配置参数的读取. 常用的解析配置文件的是configParser,解析命令行参数的则为getopt. getopt的参数可以 ...

  9. getopt、getopt_long命令参数

    参数 optstring为选项字符串.如果选项字符串里的字母后接着冒号":",则表示还有相关的参数 getopt int getopt(int argc, char * const ...

随机推荐

  1. MySql优化浅析

    优化点:合理的使用索引,可以大幅度提升sql查询效率,特别查询的表的数据量大的时候,效果明显.一.引言 公司的产品XX出行上线正式运营,随着数据量的变大,司机2000+,日订单1万+,注册乘客26W+ ...

  2. ajax 和 mock 数据

    ajax ajax是一种技术方案,但并不是一种新技术.它依赖的是现有的CSS/HTML/Javascript,而其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以 ...

  3. 告别加载dll 出错开机加载项大揭秘

    提到开机加载(load)项,大家不要以为就是系统启动(run)项.最简单的例子是,杀毒软件或者用户手动删除病毒文件后,注册表中的自动加载信息仍在,登陆系统时就会提示"加载*dll出错,系统找 ...

  4. Thunder团队第二周 - Scrum会议7

    Scrum会议7 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...

  5. dataTables工作总结

    近期在工作中用到了dataTables,现在总结一下在工作中遇到的问题以及解决方法,如有不妥之处希望多多指教,定会改进. 首先这里用的是coloradmin框架,在vs环境下开发. 这里写一个容器用于 ...

  6. Mininet实验 MAC地址学习分析

    拓扑图 学习过程分析 首先交换机A和交换机B一开始的MAC地址表都是空的. 此时主机11向主机33发送一个数据帧. 数据帧会先到达交换机A,交换机A会获得主机11的MAC地址和端口号.(此时交换机A的 ...

  7. Android蓝牙开发浅谈(转)

    http://www.eoeandroid.com/thread-18993-1-1.html 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少     A ...

  8. PAT L1-039 古风排版

    https://pintia.cn/problem-sets/994805046380707840/problems/994805091888906240 中国的古人写文字,是从右向左竖向排版的.本题 ...

  9. MySQL优化之profile

    分析SQL执行带来的开销是优化SQL的重要手段.在MySQL数据库中,可以通过配置profiling参数来启用SQL剖析.该参数可以在全局和session级别来设置.对于全局级别则作用于整个MySQL ...

  10. C#里面Console.Write()和Console.WriteLine()有什么区别?

    Console.Write()和Console.WriteLine()都是System.Console提供的方法,两着主要用来将输出流由指定的输出装置(默认为屏幕)显示出来.两着间的差异在Consol ...