命令行参数解析:getopt,getopt_long
#include <unistd.h>
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg; /* 当前选项对应的参数,or NULL */
extern int optind, opterr, optopt;
/* optind 再次调用getopt()时在argv中的索引;
* 遇到无法解析选项时,返回 '?' ,显示错误消息,若不想显示则opterr=0;
* optopt 最后一个未知选项的索引;
#include <getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
int getopt_long_only(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
getopt(): _POSIX_C_SOURCE >= 2 || _XOPEN_SOURCE
getopt_long(), getopt_long_only(): _GNU_SOURCE
argc,**argv: main函数传递
*optstring: 对于每一个字符选项而言,'c'表示无参数;'c:'表示有参数,形式 "-c Argument"/"-cArgument";'c::'表示参数可有可无,若有形式只能是'-cArgument'。
struct option数组最后的元素全0,*longindex保存当前数组索引。
struct option {
const char *name; /* 长选项名字 */
int has_arg; /* 选项是否有参数:no_argument,0;required_argument,1;optional_argument,2 */
int *flag;
int val;
};
/* *flag,val仅作用于长选项
* flag==NULL时,val;
* flag!=NULL时,返回 0,val保存到flag中
*/
getopt成功,返回选项字符;解析完毕返回-1;遇到不在optstring中的选项,返回 '?';遇到缺少参数的选项,返回 ':'(若optstring第一个字符为 ':',否则返回 '?'。
getopt_long 短选项,返回对应选项字符;长选项时,返回val(flag==NULL),返回0(flag!=NULL,保存val);其他情况同getopt。
getopt_long例子
#include<string.h>
#include<strings.h>
#include<stdio.h>
#include<stdlib.h>
#include<getopt.h> int reload,time; static const struct option long_options[]=
{
{"force",no_argument,NULL,'f'},
{"reload",no_argument,&reload,},
{"time",required_argument,NULL,'t'},
{NULL,,NULL,}
};
int main(int argc, char *argv[])
{
int opt=,options_index=;
while((opt=getopt_long(argc,argv,"frt:?h",long_options,&options_index))!=-)
{
switch(opt)
{
case 'f':
printf("case f opt=%c",opt);
break;
case 'r':
printf("case r opt=%c",opt);
break;
case 't':
printf("case t opt=%c",opt);
break;
case :
printf("case 0 opt=%c",opt);
break;
}
printf(" optarg=%s\t optind=%d\t opterr=%d\t optopt=%d\t ",optarg,optind,opterr,optopt);
printf(" reload=%d,time=%d \n",reload,time);
}
return ;
}
getopt例子
#include<string.h>
#include<strings.h>
#include<stdio.h>
#include<stdlib.h>
#include<getopt.h>
#include<unistd.h> int main(int argc, char *argv[])
{
int opt;
while((opt=getopt(argc,argv,"frt:?h"))!=-)
{
switch(opt)
{
case 'f':
printf("case f opt=%c ",opt);
break;
case 'r':
printf("case r opt=%c ",opt);
break;
case 't':
printf("case t opt=%c ",opt);
break;
}
printf("optarg=%s\n",optarg);
}
return ;
}
命令行参数解析:getopt,getopt_long的更多相关文章
- 【C】命令行参数解析——getopt、getopt_long及getopt_long_only
前言 在linux下学习开源代码Webbench,遇到get_long等函数的用法,一时有点懵,故想深入了解这类命令行解析函数,并记此博文. 1.getopt getopt主要用来处理短命令行选项,例 ...
- Python命令行参数解析模块getopt使用实例
Python命令行参数解析模块getopt使用实例 这篇文章主要介绍了Python命令行参数解析模块getopt使用实例,本文讲解了使用语法格式.短选项参数实例.长选项参数实例等内容,需要的朋友可以参 ...
- python命令行参数解析模块argparse和docopt
http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...
- shell 命令行参数(getopt和getopts)
getopt 命令 使用getopt命令,可以解析任何命令行选项和参数,但是用法比较复杂.getopt的命令用法如下: $ getopt --help 用法: getopt optstring par ...
- [转]Python 命令行参数和getopt模块详解
FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...
- Python 命令行参数和getopt模块详解
有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...
- gflags命令行参数解析
gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...
- [Go] 命令行参数解析包(flag 包)使用详解
Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag // 只支持bool类型 cmd -flag=xxx cmd -flag ...
- $命令行参数解析模块argparse的用法
argparse是python内置的命令行参数解析模块,可以用来为程序配置功能丰富的命令行参数,方便使用,本文总结一下其基本用法. 测试脚本 把以下脚本存在argtest.py文件中: # codin ...
- Google开源命令行参数解析库gflags
Google开源命令行参数解析库gflags http://blog.csdn.net/lming_08/article/details/25072899 CMDLINE的解析 http://blog ...
随机推荐
- [C++程序设计]指针数组和指向指针的指针
指针数组的概念 一维指针数组的定义形式为 类型名*数组名[数组长度]; 例如 int *p[4]; 可以用指针数组中各个元素分别指向若干个字符串,使字符串处理更加方便灵活
- GIT 实验
服务器环境:linux + git + gitolite(gitolite是什么,说白了就是安装后建了一个仓库,管理员用户可以通过修改并上传配置文件实现GIT仓库及其权限的管理.提醒:别用那个gito ...
- wine下汉字方块解决
1.修改字体 首先,下载一个字体,例如win下的新宋体 其次, mkdir /usr/share/fonts/windows mv simsun.ttc /usr/share/fonts/window ...
- Django学习之路
Django Website Collect django packages http://djangopackages.com/ django project http://code.djangop ...
- 为什么选择使用 Dropbox 而不是其他品牌同步工具(不要加上多余的功能,要极致和专注)
作者:吴锋链接:http://www.zhihu.com/question/19646859/answer/14707821来源:知乎著作权归作者所有,转载请联系作者获得授权. 窃以为楼主的问题,准确 ...
- Ring3下Hook NtQueryDirectoryFile隐藏文件
NTSTATUS WINAPI Hook_NtQueryDirectoryFile(IN HANDLE FileHandle,IN HANDLE Event OPTIONAL,IN PIO_APC_R ...
- 匿名函数中undefined形参疑问(转载)
唉,基本功不扎实,昨天在微博上问了个问题,就匿名函数中undefined形参,不知道是干什么用的. 经常看到这样的匿名函数代码: ;(function( $, window, document,und ...
- [转]ActiveMQ 即时通讯服务 浅析
一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...
- convertView
[convertView] 参考:https://zhidao.baidu.com/question/423895201122905772.html
- [转]Traceroute网络排障实用指南(2)
五.优先级与限速 5.1 Traceroute延时判断影响因素 Traceroute延时包括三点: 探测包到达一个特定路由器的时间 路由器生成IPMI TTL Exceed的时间 ICMP TTL E ...