不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 > linux獲解析命令行參數(shù)

linux獲解析命令行參數(shù)

時間: 佳洲1085 分享

linux獲解析命令行參數(shù)

  在linux下有時候會遇到長選項的命令行參數(shù)要怎么解析它呢?下面由學習啦小編為大家整理了linux解析命令行參數(shù)的相關(guān)知識,希望對大家有所幫助。

  linux下解析命令行參數(shù)

  getopt_long支持長選項的命令行解析,使用man getopt_long,得到其聲明如下:

  #include

  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通常是個字符常量,如果短選項和長選項一致,那么該字符就應該與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要顯示目錄的路徑。

  補充:linux解析命令行參數(shù)——getopt_long()函數(shù)使用規(guī)則

  (1)使用前準備兩種數(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)中的每個元素對應了一個長選項,并且每個元素是由四個域組成。通常情況下,可以按以下

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

  反之為0;第三個選項,可以賦為NULL;第四個選項,是該長選項對應的短選項名稱。另外,數(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)準備的兩個數(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)當處理一個帶參數(shù)的選項時,全局變量optarg會指向它的參數(shù)

  (d)當函數(shù)分析完所有參數(shù)時,全局變量optind(into argv)會指向第一個‘非選項’的位置

3598845