[c language] getopt

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

getopt(分析命令列參數)    相關函數表標頭檔        #include<unistd.h>
定義函數        int getopt(int argc,char * const argv[ ],const char * optstring);
函數說明        getopt()用來分析命令列參數。參數argc和argv是由main()傳遞的參數個數和內容。參數optstring 則代表欲處理的選項字串。此函數會返回在argv 中下一個的選項字母,此字母會對應參數optstring 中的字母。如果選項字串裡的字母后接著冒號“:”,則表示還有相關的參數,全域變數optarg 即會指向此額外參數。如果getopt()找不到符合的參數則會印出錯資訊,並將全域變數optopt設為“?”字元,如果不希望getopt()印出錯資訊,則只要將全域變數opterr設為0即可。  短參數的定義        getopt()使用optstring所指的字串作為短參數列表,象"1ac:d::"就是一個短參數列表。短參數的定義是一個‘-‘後面跟一個字母或數字,象-a, -b就是一個短參數。每個數字或字母定義一個參數。    其中短參數在getopt定義裡分為三種:   1. 不帶值的參數,它的定義即是參數本身。   2. 必須帶值的參數,它的定義是在參數本身後面再加一個冒號。   3. 可選值的參數,它的定義是在參數本身後面加兩個冒號 。    在這裡拿上面的"1ac:d::"作為範例進行說明,其中的1,a就是不帶值的參數,c是必須帶值的參數,d是可選值的參數。   在實際調用中,‘-1 -a -c cvalue -d‘, ‘-1 -a -c cvalue -ddvalue‘, ‘-1a -ddvalue -c cvalue‘都是合法的。    這裡需要注意三點:  1. 不帶值的參數可以連寫,象1和a是不帶值的參數,它們可以-1 -a分開寫,也可以-1a或-a1連寫。  2. 參數不分先後順序,‘-1a -c cvalue -ddvalue‘和‘-d -c cvalue -a1‘的解析結果是一樣的。  3. 要注意可選值的參數的值與參數之間不能有空格,必須寫成-ddvalue這樣的格式,如果寫成-d dvalue這樣的格式就會解析錯誤。
傳回值   getopt()每次調用會逐次返回命令列傳入的參數。   當沒有參數的最後的一次調用時,getopt()將返回-1。    當解析到一個不在optstring裡面的參數,或者一個必選值參數不帶值時,返回‘?‘。   當optstring是以‘:‘開頭時,缺值參數的情況下會返回‘:‘,而不是‘?‘ 。 c.c檔案
 1 #include <stdio.h> 2 #include <unistd.h> 3  4 int main(int argc, char **argv) 5 { 6         int ch; 7         opterr = 0; 8         while ((ch = getopt(argc,argv,"a:bcde::f"))!=-1) 9         {10                 switch(ch)11                 {12                         case ‘a‘:13                                 printf("option a:‘%s‘\n",optarg);14                                 break;15                         case ‘b‘:16                                 printf("option b :b\n");17                                 break;18                         case ‘e‘:19                                 printf("option e:‘%s‘\n",optarg);20                                 break;21                         default:22                                 printf("other option :%c\n",ch);23                 }24         }25         printf("optopt +%c\n",optopt);26 27     return 1;28 }

 運行結果:

 1 ~ Home$ ./c -a 2 other option :? 3 optopt +a 4 ~ Home$ ./c -a 123 5 option a:‘123‘ 6 optopt +a 7 ~ Home$ ./c -a123 8 option a:‘123‘ 9 optopt +a10 ~ Home$ ./c -b11 option b :b12 optopt +b13 ~ Home$ ./c -cde14 other option :c15 other option :d16 other option :?17 optopt +e18 ~ Home$ ./c -e19 other option :?20 optopt +e21 ~ Home$ ./c -e12322 option e:‘123‘23 optopt +e24 ~ Home$ ./c -e 45625 option e:‘456‘26 optopt +e27 ~ Home$ ./c -f28 other option :f29 optopt +f30 ~ Home$ ./c -a 123 -bcdf -e 45631 option a:‘123‘32 option b :b33 other option :c34 other option :d35 other option :f36 option e:‘456‘37 optopt +e

 

reference:

http://vopit.blog.51cto.com/2400931/440453

   
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.