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 返回

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。