getopt_long函式基本用法-linux
一、感性認識:
- #include <stdio.h>
- #include <getopt.h>
- char * l_opt_arg;
- char * const short_options = "nbl:"; //單冒號表示是否帶有引數[l帶有引數後面加冒號]
- struct option long_options[] = {
- { "name", 0, NULL, 'n' },
- { "bf_name", 0, NULL, 'b' },
- { "love", 1, NULL, 'l' },
- { 0, 0, 0, 0},
- };
- /*
- 長選項我們用一個option結構體陣列表示長選項的資訊:
- 第一項:表示長選項的名字。
- 第二項:用來決定此長選項是否要帶引數。[這裡用數值表示]
- 第三項:我們一般都置為NULL,用來決定getopt_long函式的返回值就是第四個選項的值
- 第四項:是此長選項相對應的短選項值,因此一旦此函式讀到此長選項時,就返回與此長選項相對應的短選項
- */
- int main(int argc, char *argv[])
- {
- int c;
- while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
- {
- switch (c)
- {
- case 'n':
- printf("My name is XL./n");
- break;
- case 'b':
- printf("His name is ST./n");
- break;
- case 'l':
- l_opt_arg = optarg; //optarg代表引數
- printf("Our love is %s!/n", l_opt_arg);
- break;
- }
- }
- return 0;
- }
編譯:
[root@localhost liuxltest]# gcc -o getopt getopt.c
執行1:
[root@localhost liuxltest]# ./getopt -n -b -l forever(這個是引數)
My name is XL.
His name is ST.
Our love is forever!
執行2:
[root@localhost liuxltest]# ./getopt -nb -l forever
My name is XL.
His name is ST.
Our love is forever!
執行3:
[root@localhost liuxltest]# ./getopt -nbl forever
My name is XL.
His name is ST.
Our love is forever!
二、概念
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);
說明:
argc和argv通常直接從main()到兩個引數傳遞而來。
optsting 是選項引數組成的字串,如果該字串裡任一字母后有冒號,那麼這個選項就要求有引數。
longopts 是指向陣列的指標,這個陣列是
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
const char *name:
選項名,前面沒有短橫線。譬如"help"、"verbose"之類。
int has_arg:
描述長選項是否有選項引數,如果有,是哪種型別的引數,其值見下表:
符號常量 數值 含義
no_argument 0 選項沒有引數
required_argument 1 選項需要引數
optional_argument 2 選項引數是可選的
int *flag:
如果該指標為NULL,那麼getopt_long返回val欄位的值;
如果該指標不為NULL,那麼會使得它所指向的結構填入val欄位的值,同時getopt_long返回0
int val:
如果flag是NULL,那麼val通常是個字元常量,如果短選項和長選項一致,那麼該字元就應該與optstring中出現的這個選項的引數相同;
longindex 一般賦為NULL即可;如果沒有設定為NULL,那麼它就指向一個變數,這個變數會被賦值為尋找到的長選項在longopts中的索引值,這可以用於錯誤診斷。
幾種常用返回值:
1、每次呼叫該函式,它都會分析一個選項,並且返回它的短選項,如果分析完畢,即已經沒有選項了,則會返回-1。
2、如果getopt_long()在分析選項時,遇到一個沒有定義過的選項,則返回值為‘?’,此時,程式設計師可以列印出所定義命令列的使用資訊給使用者。
3、當處理一個帶引數的選項時,全域性變數optarg會指向它的引數
4、當函式分析完所有引數時,全域性變數optind(into argv)會指向第一‘非選項’的位置
相關文章
- fork()函式的基本用法函式
- string 函式的基本用法函式
- Linux選項解釋-getopt和getopt_long函式Linux函式
- 分割槽函式Partition By的基本用法函式
- linux 中getopt和getopt_long 用法解析Linux
- ROW_NUMBER() OVER函式的基本用法函式
- linux的命令列解析引數之getopt_long函式使用Linux命令列函式
- linux 中解析命令列引數 (getopt_long用法)Linux命令列
- linux-解析命令列選項getopt_long用法Linux命令列
- 1.linux的命令列解析引數之getopt_long函式Linux命令列函式
- linux下getopt函式的用法Linux函式
- Translate函式用法函式
- abs函式用法函式
- 命令列引數解析函式getopt_long() 使用詳解命令列函式
- MySQL8.0-分組函式ROLLUP的基本用法(GROUPING)MySql函式
- ascii函式和substr函式的用法ASCII函式
- linux中grep基本用法Linux
- EXCEL 基本函式Excel函式
- 基本函式式短碼函式
- GetModuleFileName函式的用法函式
- SQL LEN()函式用法SQL函式
- SSD-函式用法函式
- createStyleSheet()函式的用法函式
- OVER(PARTITION BY)函式用法函式
- qsort函式的用法函式
- oracle table()函式用法Oracle函式
- COALESCE函式的用法。函式
- js正規表示式基本用法JS
- TAPI基本函式 (轉)API函式
- PHP 自定義函式用法及常用函式集合PHP函式
- C++ replace() 函式用法C++函式
- Python range() 函式用法Python函式
- Python排序函式用法Python排序函式
- Instr函式的用法函式
- 【Oracle的NVL函式用法】Oracle函式
- fcntl函式用法詳解函式
- eval()函式用法詳解函式
- replaceChild()函式用法介紹函式