问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

解析命令行参数的函数

发布网友 发布时间:2023-07-16 08:23

我来回答

1个回答

热心网友 时间:2024-12-05 18:56

1.全局变量解释:
optarg:如果选项带参数,参数保存在optarg中。如果选项带可选参数,而实际无参数时,optarg为NULL。

optind:argv数组中下一次需要处理的元素的下标,系统默认初始化此值为1.0是没有意义的,argv[0]为程序名,在解析命令行参数中是没有意义的。getopt正常解析完毕后,optind设置为argv数组中第一个不是选项的元素的下标(一般为0)。

opterr:存储错误选项字符.

2.GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符。 -n 表示是一个不带参数的短选项。 --n 表示是一个不带参数的长选项。现在有一个带有参数的短选项比如说 -w foo ,那么它和长选项 --foo 是等价的。

函数声明:

函数参数:
1.argc:主函数传递过来的实参
2.argv:主函数传递过来的实参
3.optstring:一个包含选项字符的字符串。一组短选项组成的字符串

函数调用结果
1.该函数每解析完一个选项,就返回该选项字符。选项字符解析完毕后,调用getopt函数将会返回-1,然后optind设置为argv数组中第一个不是选项的元素的下标。
2.当调用getopt函数检测到错误时(比如说检测到的选项字符不在optstring实参中),默认情况下函数返回'?'。为什么说是默认呢?因为如果通过optstring实参指明选项带参数,而实际命令行没有参数时,getopt返回 ':' 而不是 '?'

关于optstring,还有几点说明:
1.如果选项带参数,该选项后接冒号,比如optstring这个实参值为"a:b",指示a带参数,b没有参数;

2.如果选项带可选参数,该选项后接两个冒号,比如"a::b",表明a可能有参数,也可能没有;

3.如果optstring的开头字符为':',表明如果指明选项带参数,而实际命令行没有参数时,getopt返回':'而不是'?'(默认情况下返回 '?' ,和无法识别的参数返回一样);

4.如果optstring的开头字符为'+',表明一但遇到一个非选项参数,马上停止扫描,随后的部分当作参数来解释;

5.如果optstring的开头字符为'-',表明如果遇到无选项参数,则把它当作选项1(不是字符'1')的参数

示例:(来源于man文档)

运行示例:

函数声明:

函数参数:
longops:指向一个option结构体数组的第一个元素。
longindex:getopt_long的最后一个参数longindex在函数返回时指向被搜索到的选项在longopts数组中的下标。

关于option struct如下:

注意在初始化option struct时:The last element of the array has to be filled with zeros.

函数返回值:
1.如果flag这个实参为null,那么这个函数返回val的值。这样短选项字符解析和长选项解析搭建了桥梁。
2.如果flag这个实参不为null,那么这个函数返回0
3.选项字符解析完毕后,调用getopt_long函数将会返回-1
4.当调用getopt_long函数检测到错误时(比如说检测到的选项字符不在longops实参中),默认情况下函数返回'?'

示例:(来源于man 文档)

运行示例如下:

getopt_long_only类似于getopt_long,但是它把 '-' 开头的选项当作长选项来处理。如果该选项与长选项不匹配,而与短选项匹配,则可以作为短选项解析。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...开始是大腿内侧,后是大腿跟上,脖子后面,再就是肚子上,现在几乎... 工程土方定额里面:人力 运输距离 0.5km以内 20m以内是什么意思 ...由诸葛亮著的《诫子训》中摘录的,问您是如何理解的?! 手把手带你将 Linux 主机配置为静态路由器 Linux配置路由功能及添加静态路由 Linux模拟路由器从实现网络模拟到运行路由器linux模拟路由器 幼儿园中班学期结束家长会稿子怎么写 幼儿园中班期末家长会的发言稿 女人在哪个年龄段性俗最强 谁知道女人多大性欲最高? shell函数求详注解 珠海南屏大桥步行至南屏街口要多久? 金湾机场到横琴口岸要多久 昨晚珠海南屏大桥下发生什么事了? 大眼角指眼睛的什么位置 足球经理2011,关于取消博斯曼法案 新政,又见新政,谁是中国足球的“ 我差点被电死。。。 没有电笔,给灯泡换开关,我以为总闸关了没有电了... 为什么职业足球球员的合同约束力如此弱? 通俗解释一下:如何判断不是哈密顿图? 汉密尔顿圈 女生说在上班,忙工作,怎么回答呢? 非你莫属京鹤是谁? 绚丽紫红配黑蓝色是什么颜色呢? 女生跟我说她工作好累该怎么回呢? 绚丽紫是紫罗兰吗 ...金黄色)混合在一起染在头发上出来是什么颜色, 秋风中,整个原野色绚丽,有什么色,什么色,还有什么色,真是什么啊! 绚丽紫加绚丽红调配出来是什么颜色? 绚丽红和绚丽紫对一起会是什么颜色 如何在Shell 中正确的传递函数返回值 一个男人对你说你是一个很让他着迷的女人 shell编程 时间函数 如果一个男生说想和你做朋友却说你领他着迷是什么意思 为什么不认识的女生走过去后,背着我低头笑 女孩走到你身边低头笑了一下是什么意思? 2寸链条16节周长和直径多少 为什么一个女生与我正视她就低头,走过我旁边就大笑? ...只能算是认识,她走到俺身边低头笑了一下是什么意思? 盲盒这一新销售模式受到消费者特别是未成年人的追捧,究竟该如何监管... 如何看待机票盲盒这种营销模式? ...#error : Building MFC application with /MD[d] (CRT dll ve... 狗打完针注意什么意思 小狗打过针的注意什么 打了狗针后要注意什么,比如说吃的 商汤灭夏和武王伐纣为什么会取得胜利?这对今天的持政者有什么启示? 关于win10不识别usb2.0的具体处理办法 1989到1992年间在澳大利亚休姆高速公路沿途发生的“背包族凶杀案” verilog语句理解 verilog的这个赋值语句是什么意思