Bo2SS

Bo2SS

0 课程介绍及命令行解析函数

  • 图片

[如何实现命令选项?可以想到主函数中的输入参数 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:选项字符串
    • 查看 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] 外部变量;像一个指针
        • 可以直接使用 [都不需要声明],因为在【引用的头文件】中已经定义了这些变量
          • 外部变量的概念

代码演示#

getopt#

  • 图片
  • 学会使用 flag、switch
  • 【冒号的含义】必选 / 可选 选项参数
  • 注意 getopt 相关的全局变量,可直接使用
  • exit () 可使用非 0 数值表示非正常退出
  • 程序结果
    • 图片
    • 供参考

附加知识点#

思考点#

Tips#

  • 小作业:用 C 语言实现 ls -al 命令
    • 学会使用流程图理清思路,推荐ProcessOn—— 在线绘制流程图网页
      • 图片
      • 来自宿船的简易流程图
  • 初学命令时不用过多地关注变种
  • 在 vim 里,输入可以查看源代码的结构化视图
  • ctags 常用操作:ctrl + ] 跳转到定义,ctrl + o 返回

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。