请解释getopt可选参数字符串的冒号作用及optarg的用法
getopt相关特性讲解
你问的几个点我分别拆解说明:
1. 选项字符串中冒号的作用
getopt的第三个参数是选项规则字符串,规则如下:
- 每个字符对应程序支持的短选项,比如
"Ss:f:"里的S、s、f就是程序支持的三个短选项,对应命令行传入的-S、-s、-f参数 - 字符后加冒号
:代表这个选项必须跟随参数,没有参数的话getopt会抛出错误- 这里
s:说明-s必须带参数,f:说明-f必须带参数
- 这里
- 字符后不加冒号代表是开关型选项,不需要参数,这里
S后面没有冒号,所以-S用的时候直接传就行,不用加后续值
2. optarg的作用
optarg是<getopt.h>头文件中预定义的全局char型指针,专门用来存储带参选项的参数值:
- 当getopt解析到后面带冒号的选项(也就是你代码里的s和f)时,会自动把该选项后面跟随的参数字符串的指针赋值给optarg,你直接拿optarg用就行。
case 's'分支的optarg作用
用户在命令行传-s 1024这类参数时,1024就是-s的参数,optarg会指向字符串"1024",代码里用atoi(optarg)就是把这个数字字符串转成整数,赋值给min_file_size变量,用来限制最小文件大小。
case 'f'分支的optarg作用
用户在命令行传-f test这类参数时,test就是-f的参数,optarg会指向字符串"test",代码里直接把这个指针赋值给substring变量,用来后续做文件名子串匹配。
实际调用示例
如果你运行程序时输入的命令是./search_file -S -s 2048 -f note,getopt的处理流程是:
- 解析到
-S,返回'S',走对应分支把should_print_file_size设为1 - 解析到
-s,识别到需要参数,取后面的2048存到optarg,返回's',转整数后min_file_size的值就是2048 - 解析到
-f,识别到需要参数,取后面的note存到optarg,返回'f',substring就指向字符串"note" - 所有选项解析完成,getopt返回-1,退出循环
内容的提问来源于stack exchange,提问作者john horton
相关产品推荐
相关产品推荐

