main (int argc,char *argv[ ]) 與 getopt

main(int argc, char *argv[ ], char **env)纔是UNIX和Linux中的標準寫法。
argc: 整數,用來統計你運行程序時送給main函數的命令行參數的個數
* argv[ ]: 字符串數組,用來存放指向你的字符串參數的指針數組,每一個元素指向一個參數
argv[0] 指向程序運行的全路徑名
argv[1] 指向在DOS命令行中執行程序名後的第一個字符串
argv[2] 指向執行程序名後的第二個字符串
...
argv[argc]爲NULL。
**env:字符串數組。env[ ]的每一個元素都包含ENVVAR=value形式的字符
串。其中ENVVAR爲環境變量,value 爲ENVVAR的對應值。
argc, argv,env是在main( )函數之前被賦值的,編譯器生成的可執行文件,main( )不是真正的入口點,而是一個標準的函數,這個函數名與具體的操作系統有關。

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

表頭文件 #include<unistd.h>
定義函數 int getopt(int argc,char * const argv[ ],const char * optstring);
extern char *optarg;
extern int optind, opterr, optopt;

getopt() 所設置的全局變量包括:
optarg——指向當前選項參數(如果有)的指針。
optind——再次調用 getopt() 時的下一個 argv 指針的索引。
optopt——最後一個未知選項。


函數說明 getopt()用來分析命令行參數。參數argc和argv是由main()傳遞的參數個數和內容。參數 optstring爲選項字符串, 告知 getopt()可以處理哪個選項以及哪個選項需要參數:
 如果選項字符串裏的字母后接着冒號“ :”,則表示還有相關的參數,全域變量optarg 即會指向此額外參數。如果在處理期間遇到了不符合optstring指定的其他選項getopt()將顯示一個錯誤消息,並將全域變量optarg設爲“?”字符,如果不希望getopt()打印出錯信息,則只要將全域變量opterr設爲0即可。

optstring中的指定的內容的意義(例如getopt(argc, argv, "ab:c:de::");
1、單個字符,表示選項,(如上例中的abcde各爲一個選項)
2、單個字符後接一個冒號:表示該選項後必須跟一個參數。參數緊跟在選項後或者以空格隔開。該參數的指針賦給optarg。(如上例中的b:c:)
3、 單個字符後跟兩個冒號,表示該選項後可以跟一個參數,也可以不跟。如果跟一個參數,參數必須緊跟在選項後不能以空格隔開。該參數的指針賦給optarg。(如上例中的e::,如果沒有跟參數,則optarg = NULL)

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