getopt()函數說明

來源:互聯網
上載者:User
 

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即可。
 
傳回值  如果找到符合的參數則返回此參數字母,如果參數不包含在參數optstring 的選項字母則返回“?”字元,分析結束則返回-1。
 
範例  #include<stdio.h>
#include<unistd.h>
int main(int argc,char **argv)
{
int ch;
opterr = 0;
while((ch = getopt(argc,argv,”a:bcde”))!= -1)
switch(ch)
{
case ‘a’:
printf(“option a:’%s’/n”,optarg);
break;
case ‘b’:
printf(“option b :b/n”);
break;
default:
printf(“other option :%c/n”,ch);
}
printf(“optopt +%c/n”,optopt);
}
 
執行  $./getopt –b
option b:b
$./getopt –c
other option:c
$./getopt –a
other option
$./getopt –a12345
option a:’12345’ /* 自己寫的測試 代碼 */#include<string.h>
#include<stdio.h>
#include<unistd.h>static int opt_a=0;
static int opt_b=0;
static int opt_c=0;
static int opt_d=0;
static int opt_e=0;
static char * opt_a_arg=NULL;static void usage()
{
        fprintf(stderr,"Usage:getopt [a arg] [b] [c] [d] [e]/n");
        exit(1);}int main(int argc,char **argv)
{
         int opt;
         char opts[]="a:bcde";
         opterr = 0;
         while((opt = getopt(argc,argv,opts)) != -1){
                 switch(opt)
                 {
                         case 'a':
                                 opt_a=1;
                                 opt_a_arg=strdup(optarg);
                                 break;
                         case 'b':
                                 opt_b=1;
                                 break;
                         case 'c':
                                 opt_c=1;
                                 break;
                         case 'd':
                                 opt_d=1;
                                 break;
                         case 'e':
                                 opt_e=1;
                                 break;
                         case '?':
                                 usage();
                                 break;
                 }
         }         if(opt_a || opt_b || opt_c|| opt_d || opt_e)
         {
                 if(opt_a)
                         printf("opt a is set and arg is %s /n",opt_a_arg);
                 if(opt_b)
                         printf("opt b is set/n");
                 if(opt_c)
                         printf("opt c is set /n");
                 if(opt_d)
                         printf("opt d is set /n");
                 if(opt_e)
                         printf("opt e is set /n");
         }else
                 usage();}/* Glib C 的getopt原始碼檔案中 內建的測試的代碼 */#ifdef TEST/* Compile with -DTEST to make an executable for use in testing
    the above definition of `getopt'.   */int
main (int argc, char **argv)
{
   int c;
   int digit_optind = 0;   while (1)
     {
       int this_option_optind = optind ? optind : 1;       c = getopt (argc, argv, "abc:d:0123456789");
       if (c == -1)
         break;       switch (c)
         {
         case '0':
         case '1':
         case '2':
         case '3':
         case '4':
         case '5':
         case '6':
         case '7':
         case '8':
         case '9':
           if (digit_optind != 0 && digit_optind != this_option_optind)
             printf ("digits occur in two different argv-elements./n");
           digit_optind = this_option_optind;
           printf ("option %c/n", c);
           break;         case 'a':
           printf ("option a/n");
           break;         case 'b':
           printf ("option b/n");
           break;         case 'c':
           printf ("option c with value `%s'/n", optarg);
           break;         case '?':
           break;         default:
           printf ("?? getopt returned character code 0%o ??/n", c);
         }
     }   if (optind < argc)
     {
       printf ("non-option ARGV-elements: ");
       while (optind < argc)
         printf ("%s ", argv[optind++]);
       printf ("/n");
     }   exit (0);
}#endif /* TEST */

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.