[如何实现命令选项?可以想到主函数中的输入参数 argc、argv]
课程内容#
getopt 函数#
【命令行解析函数】
- <unistd.h> → Unix Standard
- ⭐函数原型
- int getopt(int argc, char * const argv[], const char *optstring);
- 猜测
- 返回值 int
- ① 0:成功;-1:失败
- ② ≥0:成功;<0:失败
- 形参 argc、argv:像主函数的形参
- 形参 optstring:选项字符串
- 返回值 int
- 查看 man 手册:man 3 getopt
- 返回值是字符 [选项] 或 - 1
- 返回时会更新外部变量 optind 和静态变量 nextchar
- 如果没有选项了,返回 - 1,optind 移到 argv 的第一个元素位置 [不是选项]
- argc、argv
- 由主函数参数直接传递而来
- optstring
- 含义:所有合法的可选字符组成的字符串
- 单个字符,表示选项
- 单个字符后面如果跟着冒号
- 一个冒号,表示该选项后必须跟一个参数值
- 参数紧跟在选项后或者以空格隔开
- [类似命令里选项参数的存在]
- 两个冒号,意味着选项后的参数是可选的
- 如果有参数,必须跟在选项后,而不能用空格
- 参数的指针赋给 optarg [对于两个冒号,默认为 0←null]
- 一个冒号,表示该选项后必须跟一个参数值
- 举例
- x、y、z 代表 3 个选项
- 重复调用 getopt () 可以读入多个选项,如 - al -h
- 一些全局变量
- optarg:当有冒号时,可以提取选项参数
- optind
- 含义:argv 数组中下一个元素 [字符] 的索引
- 调用者重设其为 1 时,可以重新扫描 argv
- [PS] 外部变量;像一个指针
- 可以直接使用 [都不需要声明],因为在【引用的头文件】中已经定义了这些变量
- 外部变量的概念
- 返回值是字符 [选项] 或 - 1
代码演示#
getopt#
- 学会使用 flag、switch
- 【冒号的含义】必选 / 可选 选项参数
- 注意 getopt 相关的全局变量,可直接使用
- exit () 可使用非 0 数值表示非正常退出
- 程序结果
- 供参考
附加知识点#
思考点#
Tips#
- ⭐小作业:用 C 语言实现 ls -al 命令
- 学会使用流程图理清思路,推荐ProcessOn—— 在线绘制流程图网页
- 来自宿船的简易流程图
- 学会使用流程图理清思路,推荐ProcessOn—— 在线绘制流程图网页
- 初学命令时不用过多地关注变种
- 在 vim 里,输入可以查看源代码的结构化视图
- ctags 常用操作:ctrl + ] 跳转到定义,ctrl + o 返回