国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
linux 中解析命令行參數(shù) (getopt_long用法)
getopt_long支持長選項的命令行解析,使用man getopt_long,得到其聲明如下:
  #include <getopt.h>

       int getopt_long(int argc, char * const argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

       int getopt_long_only(int argc, char * const argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

說明:函數(shù)中的argc和argv通常直接從main()到兩個參數(shù)傳遞而來。optsting是選項參數(shù)組成的字符串,如

果該字符串里任一字母后有冒號,那么這個選項就要求有參數(shù)。下一個參數(shù)是指向數(shù)組的指針,這個數(shù)組是

option結(jié)構(gòu)數(shù)組,option結(jié)構(gòu)稱為長選項表,其聲明如下:

 struct option {
              const char *name;
              int has_arg;
              int *flag;
              int val;
          };

結(jié)構(gòu)中的元素解釋如下:
const char *name:選項名,前面沒有短橫線。譬如"help"、"verbose"之類。
int has_arg:描述長選項是否有選項參數(shù),如果有,是哪種類型的參數(shù),其值見下表:
符號常量             數(shù)值            含義
no_argument            0            選項沒有參數(shù)
required_argument      1            選項需要參數(shù)
optional_argument      2            選項參數(shù)是可選的
int *flag:
如果該指針為NULL,那么getopt_long返回val字段的值;
如果該指針不為NULL,那么會使得它所指向的結(jié)構(gòu)填入val字段的值,同時getopt_long返回0
int val:
如果flag是NULL,那么val通常是個字符常量,如果短選項和長選項一致,那么該字符就應(yīng)該與optstring中

出現(xiàn)的這個選項的參數(shù)相同;

最后一個參數(shù):longindex參數(shù)一般賦為NULL即可;如果沒有設(shè)置為NULL,那么它就指向一個變量,這個變量

會被賦值為尋找到的長選項在longopts中的索引值,這可以用于錯誤診斷。

注:GNU提供的getopt-long()和getopt-long-only()函數(shù),其中,后者的長選項字串是以一個短橫線開始的

,而非一對短橫線。


linux 命令行約定:
     幾乎所有的GNU/Linux程序都遵循一些命令行參數(shù)定義的約定。程序希望出現(xiàn)的參數(shù)可以分成兩種:選

項(options or flags)、其他類型的的參數(shù)。Options修飾了程序運行的方式,其他類型的參數(shù)則提供了輸

入(例如,輸入文件的名稱)。

     對于options類型參數(shù)可以有兩種方式:
     1)短選項(short options):顧名思義,就是短小參數(shù)。它們通常包含一個連字號和一個字母(大寫

或小寫字母)。例如:-s,-h等。
     2)長選項(long options):長選項,包含了兩個連字號和一些大小寫字母組成的單詞。例如,--

size,--help等。
     *注:一個程序通常會提供包括short options和long options兩種參數(shù)形式的參數(shù)。

     對于其他類型參數(shù)的說明:
     這種類型的參數(shù),通常跟隨在options類型參數(shù)之后。例如,ls –s /功能為顯示root目錄的大小?!?

’這個參數(shù)告訴ls要顯示目錄的路徑。


getopt_long()函數(shù)使用規(guī)則:

(1)使用前準(zhǔn)備兩種數(shù)據(jù)結(jié)構(gòu)
    字符指針型變量
    該數(shù)據(jù)結(jié)構(gòu)包括了所有要定義的短選項,每一個選項都只用單個字母表示。如果該選項需要參數(shù)(如,

需要文件路徑等),則其后跟一個冒號。例如,三個短選項分別為‘-h’‘-o’‘-v’,其中-o需要參數(shù),

其他兩個不需要參數(shù)。那么,我們可以將數(shù)據(jù)結(jié)構(gòu)定義成如下形式:
const char * const shor_options = “ho:v” ;

    struct option 類型數(shù)組
    該數(shù)據(jù)結(jié)構(gòu)中的每個元素對應(yīng)了一個長選項,并且每個元素是由四個域組成。通常情況下,可以按以下

規(guī)則使用。第一個元素,描述長選項的名稱;第二個選項,代表該選項是否需要跟著參數(shù),需要參數(shù)則為1,

反之為0;第三個選項,可以賦為NULL;第四個選項,是該長選項對應(yīng)的短選項名稱。另外,數(shù)據(jù)結(jié)構(gòu)的最后

一個元素,要求所有域的內(nèi)容均為0,即{NULL,0,NULL,0}。下面舉例說明,還是按照短選項為‘-h’‘-o’

‘-v’的例子,該數(shù)據(jù)結(jié)構(gòu)可以定義成如下形式:
const struct option long_options = {
{  “help”,      0,   NULL,   ‘h’  },
{  “output”,    1,   NULL,   ‘o’  },
{  “verbose”,   0,   NULL,   ‘v’  },
{  NULL,      0,    NULL,   0  }
};

(2)調(diào)用方法
     參照(1)準(zhǔn)備的兩個數(shù)據(jù)結(jié)構(gòu),則調(diào)用方式可為:
getopt_long( argc, argv, short_options, long_options, NULL);

(3)幾種常見返回值
    (a)每次調(diào)用該函數(shù),它都會分析一個選項,并且返回它的短選項,如果分析完畢,即已經(jīng)沒有選項了,

則會返回-1。
    (b)如果getopt_long()在分析選項時,遇到一個沒有定義過的選項,則返回值為‘?’,此時,程序員可

以打印出所定義命令行的使用信息給用戶。
    (c)當(dāng)處理一個帶參數(shù)的選項時,全局變量optarg會指向它的參數(shù)
    (d)當(dāng)函數(shù)分析完所有參數(shù)時,全局變量optind(into argv)會指向第一個‘非選項’的位置

實踐小例子:

  1. #include <stdio.h>  
  2. #include <getopt.h>  
  3. char *l_opt_arg;  
  4. charconst short_options = "nbl:";  
  5. struct option long_options[] = {  
  6.      { "name",     0,   NULL,    'n'     },  
  7.      { "bf_name",  0,   NULL,    'b'     },  
  8.      { "love",     1,   NULL,    'l'     },  
  9.      {      0,     0,     0,     0},  
  10. };  
  11. int main(int argc, char *argv[])  
  12. {  
  13.      int c;  
  14.      while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)  
  15.      {  
  16.          switch (c)  
  17.          {  
  18.          case 'n':  
  19.              printf("My name is XL.\n");  
  20.              break;  
  21.          case 'b':  
  22.              printf("His name is ST.\n");  
  23.              break;  
  24.          case 'l':  
  25.              l_opt_arg = optarg;  
  26.              printf("Our love is %s!\n", l_opt_arg);  
  27.              break;  
  28.          }  
  29.      }  
  30.      return 0;  
  31. }  

編譯并運行:

[root@localhost liuxltest]# gcc -o getopt getopt.c

[root@localhost liuxltest]# ./getopt -n -b -l forever
My name is XL.
His name is ST.
Our love is forever!
[root@localhost liuxltest]#

[root@localhost liuxltest]# ./getopt -nb -l forever
My name is XL.
His name is ST.
Our love is forever!
[root@localhost liuxltest]# ./getopt -nbl forever 
My name is XL.
His name is ST.
Our love is forever!

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Windows下使用GetOpt函數(shù)使用
Linux編程里getopt_long_only函數(shù)用法詳解
getopt_long() 函數(shù)說明
getopt終端控制函數(shù)
(轉(zhuǎn))linux下 getopt() 函數(shù)的使用
GNU長選項命令行解析getopt
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服