getopt()

ops/2024/9/23 7:21:30/

命令选项参数解析
我们都是知道程序在启动时是可以接收命令参数的。通过main(int argc,char **argv)函数的argc和argv来传入命令参数。这时我们需要解析。当然glibc库中包含了相关函数来方便我们解析命令参数。

为了表述方便,我们用命令gcc -o exefile test.c来举例说明。其中gcc是运行命令(可执行文件),-o exefile test.c是它的参数。各个参数之间使用空格分开。main()函数的argc表明了输入参数的个数。此例的argc=4(gcc本身也算一个参数)。argv为一个字符串指针数组。存放这所有输入参数的指针。如argv[0]指向gcc,argv[1]指向-o,argv[2]指向exefile等等。

除此之外,输入参数中有些术语需要了解。如下

短选项:如上面的-o就是短选项。它由-开头,后面只能跟一个字符。短选项又具体分为:
必须带参数的短选项:指它后面必须要有一个参数。如-o exefile,exefile就是它的参数。
可选带参的短选项:指它后面可以带或不带参数。
不带参的短选项:指它后面不带参数。
长选项:如--version就是长选项。它由--开头,后面可跟多个字符。它也分必须带参,可选带参,不带参。
无选项参数:它前面不需要有短选项或长选项。如上面的test.c参数。
glibc库中提供了支持解析短选项的getopt()函数和长选项的getopt_long()函数。看下面的介绍和使用例程。

解析程序输入参数相关函数介绍
下面函数都需要包括getopt.h文件。

int getopt(int argc, char *const argv[],const char *optstring)
描述:解析命令行参数。调用getopt()函数解析完argv数组后,会对其排序。将其无选项参数放在最后。如果不想让其排序,定义环境变量_POSIX_OPTION_ORDER即可。
argc,argv:和main函数的这两个参数一样。第一个代表参数个数。第二个是选项数组。
optstring:指定选项格式。具体格式如下(a代表某个选项)
a:表示此选项没有参数,如-a。如果跟了参数会报错。如-a lkd这种格式错误。
a::表示此选项有参数,如-a lkd。以可连写为-alkd。如果不跟参数会报错。
a::表示此选项的参数可选。当有时必须用连写方式-alkd。此种格式是GNU扩展的。
eg:optstring = "a:bc::"表示a选项必须要有参数,b选项无参数,c选项可有可无。所以输入参数的格式应为./test -a lkd -b -cname.
return:如果选项成功找到,返回选项字母;当没有更多的选项参数可用时,它返回-1.
注意:对其无选项参数,可以在getopt()将选项参数解析完之后(此时会参数默认会自动排序,将其无选项参数放在了最后),直接使用optind跟argc对比打印。


http://www.ppmy.cn/ops/41411.html

相关文章

FullCalendar日历组件集成实战(4)

背景 有一些应用系统或应用功能,如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件,但功能比较简单,用来做数据展现勉强可用。但如果需要进行复杂的数据展示,以及互动操作如通过点击添加事件&#xff0…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

C语言操作符(补充+面试)

移位操作符 左移操作符&#xff08;<<&#xff09; 左移操作符将操作数的所有位向左移动指定的位数。移动过程中&#xff0c;右侧空出的位用0填充。例如&#xff0c;将二进制数1010左移1位&#xff0c;得到的结果是101000。在C语言中&#xff0c;左移操作符通常用于实现…

Redis分布式缓存

分布式缓存 引入&#xff1a; 一&#xff1a;持久化&#xff1a; 1.1.RDB持久化&#xff1a; 1.2.AOF文件&#xff1a; 记得关闭RDB&#xff0c;开启AOF。 注意&#xff0c;AOF默认是详细的记录每一条命令&#xff0c;即使是对同一个key的多次修改&#xff0c;RDB只会记录最…

ssrf漏洞学习——基础知识

一、SSRF是什么&#xff1f; SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。&#xff08;正是因为它是由服务端发起的&#xff0c;所以它能…

【Viso画图】Viso导出与图形适配的pdf

step1:选中开发工具点击shapeSheet&#xff0c;选中页 step2&#xff1a;进入页面参数设置窗口&#xff0c;将下面框选的参数设为0,enter后保存 目前效果&#xff1a; step3:选中设计->大小&#xff0c;选择适应页面大小或者自己根据图片调整 目前效果&#xff1a; step4: 以…

idea2023.3.2版本全局设置maven地址

idea每次新建项目都默认使用了一个user目录下的地址&#xff0c;而不是自己安装的maven地址&#xff0c;每次创建项目后&#xff0c;都要重新从settings中设置一下maven地址。 可以全局修改&#xff1a;首先在File-->Close Project回到idea最开始的界面 然后在Customize里点…

翻工第二次 Ant Design Pro 下载,发现问题,电脑网络配置有误,魔法了

一、相关网址链接 鱼皮的用户中心项目 &#xff08;前端Ant Design Pro构建&#xff09; 语雀 ## 没有选择umi版本这一步 Issue #11144 ant-design/ant-design-pro GitHub 关于umi ui图标未显示问题_umi ui不出现-CSDN博客 二、存在问题 导致下载速度慢 本人镜像代码写…