getopt 函式的使用

2021-06-05 03:04:43 字數 2007 閱讀 9785

每一天你都在使用大量的命令列程式,是不是感覺那些命令列引數用起來比較方便,他們都是使用getopt來實現的。

在linux下使用getopt寫程式是一種比較方便的事情,下面來簡單的介紹一下getopt的使用。

在討論引數處理之前,我們先明確兩個概念:選項、選項引數

gcc -g -o test test.c

我們經常使用上面的命令來編譯程式,這裡g和o就是選項,其中test就是o的選項引數。

getopt()函式宣告和與其有關的全域性變數如下:

首先是函式宣告:

#include extern char *optarg;

extern int optind;

extern int optopt;

extern int opterr;

extern int optreset;

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

先看乙個例子:

#include #include int main(int argc, char **argv)

case 'b':

case 'c':

case 'd':

} }printf("optind:%d\n", optind);

for(i=0; i執行結果:

[feng@feng test]$ ./test_getopt -a -b hello -c world -d china yf

optind:1, opterr:1

---------ab

cdoptind:7

./test_getopt

-a-b

hello

-cworld

-dchina

yf分析如下:

getopt()每呼叫一次返回乙個選項。

argc 和 argv 很顯然就是 main 函式的兩個引數。

字串 optstring 可以包含下列元素:單個字元,字元後面接乙個冒號說明後面跟隨乙個選項引數,字元後面接兩個冒號說明後面跟隨乙個可有可無的選項引數。例如,乙個選項字元 "x" 表示選項 "-x" ,選項字元 "x:" 表示選項和其引數 "-x argument",選項字元 "x::" 表示選項 x 的引數是可選的(「::」 是 gnu 增加的,不一定在所有的unix 系統下都可以使用)。

getopt()的返回後,如果有選項引數的話 optarg 指向選項引數,並且變數 optind 包含下乙個 argv 引數作為對 getopt() 下一次呼叫的索引。變數 optopt 儲存最後乙個由 getopt() 返回的已知的選項。

當引數列已經到結尾時getopt()函式返回-1,當遇到乙個未知的選項時 getopt 返回'?'。引數列中選項的解釋可能會被'--'取消,由於它引起 getopt()給引數處理傳送結束訊號並返回-1。

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

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

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

「無效選項」 ―― getopt()返回'?',並且optopt包含了無效選項字元(這是正常的行為)。

「缺少選項引數」 ―― getopt()返回':',如果optstring的第乙個字元不是冒號,那麼getopt()返回'?',這會使得這種情況不能與無效選項的情況區分開。

例如optstring為:a:b::c,表示a帶乙個引數,b可選,c不帶引數

如果輸入d,「無效選項「,getopt返回'?'

如果輸入的a忘記帶引數,「缺少選項引數」,getopt應返':' ;如果不再optstring的第乙個字元不是':'的話,那麼將會把這個錯當成"無效引數",從而getopt返回'?';從而無法區別錯誤型別。

getopt函式的使用

include int getopt int argc,char const argv,const char optstring 這是getopt函式的原型 函式用來分析命令列引數,有三個引數,argc表示引數個數,argv表示引數內容,optstring表示可選選項,重點就在於optstring的...

C函式getopt使用

getopt 分析命令列引數 相關函式表頭檔案 include 定義函式 int getopt int argc,char const argv const char optstring 函式說明 getopt 用來分析命令列引數。引數argc和argv是由main 傳遞的引數個數和內容。引數opt...

getopt函式的使用和例項

在 a a arg b b arg c 中,選項 a,b,c 引數 a arg,b arg 呼叫形式 getopt argc,argv,ab c 找了一遍以後返回 1,因此最後總是會返回 1的。a 選項a後面有引數,可以用乙個或者多個空格隔開,也可以不用空格,緊跟著a。即 a a arg 或者 aa...