[如何實現命令選項?可以想到主函數中的輸入參數 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 返回