博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
getopt--parse command line options
阅读量:6514 次
发布时间:2019-06-24

本文共 1873 字,大约阅读时间需要 6 分钟。

getopt解析命令行选项

getopt, getopt_long, getopt_long_only, optarg, optind, opterr, optopt - Parse command-line options

#include 
int getopt(int argc, char * const argv[], const char *optstring); extern char *optarg; extern int optind, opterr, optopt;

其中argc和argv等同于main函数参数。

命令行选项元素(an option element)一般以-开头,之后的字符就是命令行选项字符(option characters)。重复调用getopt(),可连续得到命令行选项元素中的选项字符。

optstring是包含选项字符的字符串。若一个字符后面有一个冒号(:),选项需要一个参数(argument),optarg指向选项字符后面的文本(如-oarg,指向arg)或后面的参数(如-o arg,指向arg)。

 

optind是下一个要处理的选项元素的索引。系统初始化optind为1,可以reset到1以重新扫描argv。

若getopt()找到另一个选项字符,返回该选项字符,并同时更新optind和nextchar。

若没有选项字符了,getopt()返回-1。optind是第一个不是选项元素的argv-element的索引。

两个冒号表示选项有一个可选的参数,有参数时optarg指向参数,无时为0。

默认情况下,getopt()打乱argv顺序,如此所有非选项参数都在最后(如gcc foo.c -Wall, foo.c被排到最后)。

若getopt()不识别选项字符,向stderr打印错误信息,并保存字符到optopt,返回‘?’。程序可以设置opterr为0来阻止错误消息。

若getopt()找到一个选项字符不在optstring,或选项少参数,返回‘?’,并设置optopt为实际字符。optstring的第一个字符是一个冒号(:),getopt()返回’:'来代替‘?’。

返回值

一个选项找到,getopt()返回选项字符。所有选项都解析完后,返回-1。

若一个选项不在optstring中,返回‘?’。

若选项少参数,返回值依赖于optstring第一个字符:若第一个字符为‘:’,返回‘:’,否则返回‘?’。

#include 
#include
#include
int main(int argc, char * argv[]){ int flags, opt; int nsecs, tfnd; nsecs = 0; tfnd = 0; flags = 0; while((opt=getopt(argc, argv, "nt:")) != -1){ switch(opt) { case 'n': flags = 1; break; case 't': nsecs = atoi(optarg); tfnd = 1; break; default : /* '?' */ fprintf(stderr, "Usage: %s [-t nsecs] -n name\n", argv[0]); exit(EXIT_FAILURE); } } printf("flags=%d; tfnd=%d; optind=%d\n", flags, tfnd, optind); if(optind >= argc){ fprintf(stderr, "Expected argument after options\n"); exit(EXIT_FAILURE); } printf("name argument =%s\n", argv[optind]); exit(EXIT_SUCCESS);}

 

转载地址:http://yfofo.baihongyu.com/

你可能感兴趣的文章
用XMODEM恢复cisco3550交换机的ios
查看>>
chroot限制普通用户登录特定目录
查看>>
salt cmd.run 模块
查看>>
MySQL二进制日志的管理
查看>>
Android Studio 第七十三期 - Android Glide4.7.3用法大全支持九宫格
查看>>
Linux禁止非WHEEL用户使用SU命令
查看>>
DOS命令集合
查看>>
ubuntu的root权限
查看>>
外贸仿牌选择虚拟主机要步步为营
查看>>
Nginx介绍
查看>>
windows 配置dhcp服务器
查看>>
调整数组使奇数全部都位于偶数前面
查看>>
HYSwitch - iOS7风格的开关控件
查看>>
我的信念
查看>>
Java学习笔记(1)
查看>>
我的友情链接
查看>>
c++类模板深度剖析
查看>>
Xshell远程连接VMware如何修改网卡配置文件
查看>>
/proc/sys/net/ipv4详解(1)
查看>>
rpm命令浅析
查看>>