函式getopt 應用詳解

2021-07-11 04:53:38 字數 1732 閱讀 4370

命令列引數解析函式 —— getopt()

getopt()函式宣告如下:

#include

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

extern char *optarg;

extern int optind, opterr, optopt;

該函式的argc和argv引數通常直接從main()的引數直接傳遞而來。optstring是選項字母組成的字串。如果該字串裡的任一字元後面有冒號,那麼這個選項就要求有選項引數。

當給定getopt()命令引數的數量 (argc)、指向這些引數的陣列 (argv) 和選項字串 (optstring) 後,getopt()將返回第乙個選項,並設定一些全域性變數。使用相同的引數再次呼叫該函式時,它將返回下乙個選項,並設定相應的全域性變數。如果不再有可識別的選項,將返回-1,此任務就完成了。

getopt()所設定的全域性變數包括:

以下面的程式為例:

選項:#include

#include

int main (int argc, char **argv)

}return 0;

}執行結果:

$ ./opt_parse_demo -n

my name is lyong.

$ ./opt_parse_demo -g

her name is xxiong.

$ ./opt_parse_demo -l forever

our love is forever

$ ./opt_parse_demo -ngl forever

my name is lyong.

her name is xxiong.

our love is forever

不正確的呼叫程式在所難免,這種錯誤要麼是命令列選項無效,要麼是缺少選項引數。正常情況下,getopt()會為這兩種情況輸出自己的出錯資訊,並且返回'?'。為了驗證此事,可以修改一下上面的清單2中的**。

#include

#include

int main (int argc, char **argv)

}return 0;

}輸入乙個錯誤的命令列,結果如下:

$ ./opt_parse_demo -l

./opt_parse_demo: option requires an argument -- l

arguments error!

如果不希望輸出任何錯誤資訊,或更希望輸出自定義的錯誤資訊。可以採用以下兩種方法來更改getopt()函式的出錯資訊輸出行為:

在呼叫getopt()之前,將opterr設定為0,這樣就可以在getopt()函式發現錯誤的時候強制它不輸出任何訊息。

如果optstring引數的第乙個字元是冒號,那麼getopt()函式就會保持沉默,並根據錯誤情況返回不同字元,如下:

#include

#include

int main (int argc, char **argv)

}return 0;

}測試結果:

$ ./opt_parse_demo -a

無效的選項字元 ' a '!

$ ./opt_parse_demo -l

缺少選項引數!

PHP函式getopt詳解

短引數 它返回乙個包含命令列引數的陣列。比如,要獲得 a b 和 c的值,可以這麼做 arguments getopt a b c 可以用下面的方式執行指令碼 有無空格是沒有關係的,注意看第乙個例子和第二個例子 orprint r arguments 將返回 array b bar c car 注意...

getopt 用法詳解

getopt被用來解析命令列選項引數。就不用自己寫東東處理ar 了。include extern char optarg 選項的引數指標 extern int optind,下一次呼叫getopt的時,從optind儲存的位置處重新開始檢查選項。extern int opterr,當opterr 0...

getopt函式分析

函式getopt主要用於拆分命令列引數,用這個函式就不自己寫命令列引數解析程式了,以下 摘自tcpdump原始碼,對這個函式比較感興趣,故對此進行分析注釋,因水平實在不敢恭維,不足之處希望能一起 函式getopt 有三個引數,nargc,nargv就是命令列傳過來的argc和argv字串ostr,它...