標籤:hub 實現 rect 複位 共用 入參 .com otto nis
By francis_hao Jul 5,2017
getopt:分析命令列選項
概述
#include <unistd.h> int getopt(int argc,char*const argv[],constchar*optstring); externchar*optarg; externint optind, opterr, optopt; |
描述
getopt()函數分析命令列參數,它的參數argc和argv就是程式傳遞給main()函數的參數,一個以‘-‘(不是僅有一個‘-‘或"--")開頭的argv元素就是一個選項。‘-‘後面跟著的就是選項字元,調用多次getopt()函數會連續返回選項字元
變數optind是下一個要處理的元素在argv中的索引,系統初始化該變數為1,調用者可以給它複位為1,以重新掃描argv或掃描一個新的參數向量。
如果getopt()找到一個選項字元,它返回該字元,更新外部變數optind和靜態變數nextchar,因此下一次調用getopt()函數時可以繼續掃描剩餘的選項。如果已經沒有更多的選項字元了,getopt()則返回-1,然後,optind變為argv第一個不是選項元素的索引。
optstring是輸入參數,它是一個包含需要進行處理的選項字元的集合,如果字元後面跟著一個冒號,表示該選項需要一個參數,因此getopt()將放置一個指向選項後面參數的指標給optarg,注意,形如-t 1和-t1都是可以的,都會將"1"傳給optarg。兩個冒號說明選項參數是可選的。
預設情況下,getopt()會排列它掃描到的argv中的內容,因此最終,所有不是選項的項會排在最後,另外實現的兩種模式:
1、如果optstring的第一個字元是‘+‘,或者環境變數POSIXLY_CORRECT置位,那麼getopt()遇到非選項參數即停止,
2、如果optstring的第一個字元是‘-‘,那麼每個不是選項的參數,都被當作選項為1的參數處理
命令列中一個特殊的參數"--",當getopt()遇到它時,會強制參數掃描結束。
如果getopt()沒有識別選項字元,它會列印一個錯誤資訊到標準錯誤,存放這個字元到optopt並返回‘?‘。調用程式可以通過將opterr置0來防止產生錯誤資訊的列印。
關於長選項參見man getopt_long。
樣本
本樣本為man手冊上的例子,添加了一些列印以驗證部分描述中的說明。
#include <unistd.h> #include <stdlib.h> #include <stdio.h>
|
一個執行執行個體:
做以下說明:
- optind會指向下一次getopt()函數要處理的argv的索引,最終會指向第一個不是選項的參數的argv中的索引(例中的"name")。
- argv中的參數會被重新排序,不是選項的參數會排在選項參數之後。
- 需要參數的選項,這兩種形式是一樣的:-t1和-t 1。
程式源碼在github上,可以直接clone編譯。
本文由 劉英皓 創作,採用 知識共用 署名-非商業性使用-相同方式共用 3.0 中國大陸 許可協議進行許可。歡迎轉載,請註明出處:
轉載自:http://www.cnblogs.com/yinghao1991/
參考
【1】 man 3 getopt
C語言getopt