getopt (3)

#include <unistd.h>

int getopt(int argc, char *const argv[], const char *optstring);


getopt調用分解命令行參數,它的參數argc和argv時mian函數的兩個參數。argv中以'-'開頭的元素除了('-')和('—')是一個選項。這個元素的字符(在'-'字符後面)是選項字符。如果getopt被重複的調用,它返回每個選項字符。


變量optind是在argv中下一個被處理的元素的索引,0開始。系統初始化它爲1。調用者可以重置它爲1


如果getopt找到另一個選項字符,它返回那個字符。刷新外部變量optind和靜態變量nextchar。之後下次getopt調用就可以掃描剩餘的選項字符或argv的元素


如果沒有再多的選項字符,getopt返回-1.optind是第一個argv元素中非選項字符在argv中的索引,0開始。/*argv中數組的順序被getopt調整了,把所有分選項字符放到後面,選項字符放到前面*/


optstring是包含目標選項字符的字符串。如果一個字符後面跟隨一個冒號,那這個選項需要一個參數,getopt將指向該參數的指針放在optarg。兩個冒號表示這個選項有一個可選參數,如果有參數在當前argv元素,(例如緊跟在選項後面,如”-oarg”),它將返回在optarg。在其它情況下optarg置0。如果optstring包含W後面跟隨着分號,那-W foo將和長選項—foo一樣。-W選項是POSIX.2保留的。


默認的,getopt會調換argv元素的序列,非選項字符放在後面。如果optstring的第一個字符時+或者環境變量POSIXLY_CORRECT被設置,則在遇到第一個非選項字符時選項處理停止。如果optstring的第一個字符是-,則每一個非選項的argv元素將當作選項字符1的參數。特殊參數”--”強制選項掃描結束。


如果getopt不能識別一個選項字符,它向stderr打印錯誤信息,將該字符存入optopt,並返回?。調用程序可以設置opterr爲0阻止打印錯誤信息。


如果getopt獲得一個選項字符不包含在optstring中,或者它沒有給出參數,getopt將返回?和設置外部變量optopt爲實際選項字符。如果optstring的第一個字符是冒號,則getopt將返回冒號替代?來指示遺失參數。如果錯誤發生而且optstring的第一個字符是冒號而且外部變量opterr非0,則getopt打印錯誤信息。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章