系统调用getopt解析
声明:
#include <unistd.h>
int getopt(int argc, char *const argv[], const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
使用方法:在while循环中反复调用,直到它返回-1。每当找到一个有效的选项字母,它就返回这个字母。如果选项有参数,就设置optarg指向这个参数。
当程序运行时,getopt()函数会设置控制错误处理的几个变量:
char *optarg ──如果选项接受参数的话,那么optarg就是选项参数。
int optind──argv的当前索引,当while循环结束的时候,剩下的操作数在argv[optind]到argv[argc-1]中能找到。
int opterr──当这个变量非零(默认非零)的时候,getopt()函数为"无效选项”和“缺少选项参数”这两种错误情况输出它自己的错误消息。可以在调用getopt()之前设置opterr为0,强制getopt()在发现错误时不输出任何消息。
int optopt──当发现无效选项的进修,getopt()函数或者返回'?'字符,或者返回字符':'字符,并且optopt包含了所发现的无效选项字符。
例子:
/* getopttest.c ── 练习系统调用getopt()的用法,为实现shell内置命令getopts和各个命令的命令行参数解析做准备 */
#include <stdio.h>
#include <unistd.h>
// 程序接受两个参数:-a -b ,其中-b选项必需带一个参数(整数)
int main(int argc, char *argv[])
{
int oc;
char * b_opt_arg;
while((oc = getopt(argc, argv, "ab:")) != -1)
{
switch(oc)
{
case 'a':
printf("have option -a\n");
break;
case 'b':
b_opt_arg = optarg;
int count = atoi(b_opt_arg);
// 输出count个have option b, arg is `count`
int i = 0;
for (i = 0; i < count; i++)
printf("have option -b, arg is %s\n", b_opt_arg);;
break;
case ':':
// 缺少选项参数
fprintf(stderr, "%s: option '-%c' is invalid: ignored\n", argv[0], optopt);
break;
case '?':
default:
// 无效选项
fprintf(stderr, "%s: option '-%c' is invalid: ignored\n", argv[0], optopt);
break;
}
}
}
编译、运行 :
转载于:https://blog.51cto.com/laoqinblog/71455
系统调用getopt解析相关推荐
- python 命令-python解析命令行参数的三种方法详解
这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...
- getopt( )和 getopt_long( )
有关系统调用getopt: 声明: #include <unistd.h> int getopt(int argc, char *const argv[ ...
- Windows内核系统调用分析
系统调用 进程 --> 调用OS API:OS进程管理 --> 调配进程. 仅从用户进程角度,OS就像是一个被动响应的运行时库.Windows提供了一个系统调用界面作为外层,即Win32A ...
- getopt()和getopt_long()用法
参考链接: http://home.eeworld.com.cn/home.php?mod=space&do=blog&id=43897&uid=101752 http://b ...
- getopt设计shell脚本选项
写shell脚本的时候,通过while.case.shift来设计脚本的命令行选项是一件比较麻烦的事,因为Unix命令行的选项和参数自由度很高,支持短选项和长选项,参数可能是可选的,选项顺序可能是无所 ...
- 该文件可能是只读的 或者您要访问的位置_Linux应用编程之文件操作 系统调用篇(下)...
关注.星标公众号,直达精彩内容 ID:嵌入式情报局 作者:情报小哥 1文件操作实战 上篇文章跟大家介绍了Linux系统调用的文件操作API函数,其实跟C语言中的文件读取操作差不多,所以今天小哥就利用那 ...
- python获取命令行参数,使用getopt获取命令行执行时指定的参数
首先导入: import getopt, sys getopt的使用:只用一行就可以得到所有传入的参数: opts, args = getopt.getopt(sys.argv[1:], '短参数', ...
- shellcode免杀框架内附SysWhispers2_x86直接系统调用
1.概述 之前分析CS4的stage时,有老哥让我写下CS免杀上线方面知识,遂介绍之前所写shellcode框架,该框架的shellcode执行部分利用系统特性和直接系统调用(Direct Syste ...
- 《操作系统》第一章习题加解析
<操作系统>第01章习题加解析 1. 计算机操作系统最主要的功能是( D ). A.把源代码转换成目标代码 B.提供硬件与软件之间的转换 C.提供各种中断处理程序 D.管理计算 ...
- python argv 详解_python解析传入的命令行参数 argv
python解析命令行参数主要有三种方法:sys.argv.argparse解析.getopt解析 方法一:sys.argv -- 命令行执行:python test_命令行传参.py 1,2,3 1 ...
最新文章
- RHEL5.1单域主/从NIS服务器配置及测试
- visio 2010下载
- ValueAnimation 原理分析
- Devexpress之dxErrorProvider
- .Net Core使用Ocelot网关(一) -负载,限流,熔断,Header转换
- 同宿舍的程序员毕业五年之女生篇:有人怀疑人生,有人考虑出家
- Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点
- 大数据城市规划 杨东_空头转多!前期大比例减仓的私募,目前开始加仓
- python数字保留两位_Python 鲜为人知的数值格式化
- DirectX Repair
- Flash遮罩——水波、瀑布
- mongodb的基本使用_万金油_新浪博客
- 目前见过最好的豆瓣电台第三方程序
- SCDM学习笔记(6)
- 人工智能AI伪原创一键生成文章
- 2020年复旦电子信息专硕复试经验分享
- 阿里巴巴国际站全屏代码装修贸店铺装修平台国际站平台全屏代码装修方法教程视频教程
- 【转载】SQL中declare申明变量 declare @id int
- Dropshipping在Facebook广告语怎么写?
- 路由器有信号但是连接不上网络连接服务器,无线路由器有信号却不能连接网络怎么办...
热门文章
- 蒙特卡洛树搜索算法(UCT): 一个程序猿进化的故事
- Ubuntu 自动安装libsvm
- 随机变量的原点矩、中心距、变异系数
- lambda java kotlin,Kotlin之Lambda编程
- java read bytes 阻塞_InputStream中read()与read(byte[] b)java InputStream读取数据问题 | 学步园...
- @Value(#{})与@Value(${})的区别
- Ubuntu 16.04 更换阿里云源
- [您有新的未分配科技点][BZOJ3545BZOJ3551]克鲁斯卡尔重构树
- Linux Unix shell 编程指南学习笔记(第二部分)
- 站立会议01(冲刺2)