亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

詳細解析命令行的getopt_long()函數

2020-01-26 15:51:07
字體:
來源:轉載
供稿:網友

頭文件
#include<getopt.h>

函數原型
int getopt_long(int argc,char * const argv[],const char *optstring,const struct option *longopts,int *longindex)

函數說明
getopt被用來解析命令行選項參數。
getopt_long支持長選項的命令行解析,函數中的參數argc和argv通常直接從main()的兩個參數傳遞而來。optstring是選項參數組成的字符串。

字符串optstring可以下列元素:
1. 單個字符,表示選項,

2. 單個字符后接一個冒號:表示該選項后必須跟一個參數。參數緊跟在選項后或者以空格隔開。該參數的指針賦給optarg。

3. 單個字符后跟兩個冒號,表示該選項后可以有參數也可以沒有參數。如果有參數,參數必須緊跟在選項后不能以空格隔開。該參數的指針賦給optarg。(這個特性是GNU的擴張)。
optstring是一個字符串,表示可以接受的參數。例如,"a:b:cd",表示可以接受的參數是a,b,c,d,其中,a和b參數后面跟有更多的參數值。(例如:-a host --b name)。

參數longopts,其實是一個結構的實例:

復制代碼 代碼如下:

struct option {
const char *name; //name表示的是長參數名
int has_arg; //has_arg有3個值,no_argument(或者是0),表示該參數后面不跟參數值
// required_argument(或者是1),表示該參數后面一定要跟個參數值
// optional_argument(或者是2),表示該參數后面可以跟,也可以不跟參數值
int *flag;
//用來決定,getopt_long()的返回值到底是什么。如果flag是null,則函數會返回與該項option匹配的val值
int val; //和flag聯合決定返回值
}

給個例子:
復制代碼 代碼如下:

struct option long_options[] = {
{"a123", required_argument, 0, 'a'},
{"c123", no_argument, 0, 'c'},
}

現在,如果命令行的參數是-a 123,那么調用getopt_long()將返回字符'a',并且將字符串123由optarg返回(注意注意!字符串123由optarg帶回!optarg不需要定義,在getopt.h中已經有定義),那么,如果命令行參數是-c,那么調用getopt_long()將返回字符'c',而此時,optarg是null。最后,當getopt_long()將命令行所有參數全部解析完成后,返回-1。

參數longopts,其實是一個結構的實例:

復制代碼 代碼如下:

struct option {
const char *name; //name表示的是長參數名
int has_arg; //has_arg有3個值,no_argument(或者是0),表示該參數后面不跟參數值
// required_argument(或者是1),表示該參數后面一定要跟個參數值
// optional_argument(或者是2),表示該參數后面可以跟,也可以不跟參數值
int *flag;
//用來決定,getopt_long()的返回值到底是什么。如果flag是null,則函數會返回與該項option匹配的val值
int val; //和flag聯合決定返回值
}

給個例子:
復制代碼 代碼如下:

struct option long_options[] = {
{"a123", required_argument, 0, 'a'},
{"c123", no_argument, 0, 'c'},
}

現在,如果命令行的參數是-a 123,那么調用getopt_long()將返回字符'a',并且將字符串123由optarg返回(注意注意!字符串123由optarg帶回!optarg不需要定義,在getopt.h中已經有定義),那么,如果命令行參數是-c,那么調用getopt_long()將返回字符'c',而此時,optarg是null。最后,當getopt_long()將命令行所有參數全部解析完成后,返回-1。
范例
復制代碼 代碼如下:

#include <stdio.h>
#include <getopt.h>
char *l_opt_arg;
char* const short_options = "nbl:";
struct option long_options[] = {
{ "name", 0, NULL, 'n' },
{ "bf_name", 0, NULL, 'b' },
{ "love", 1, NULL, 'l' },
{ 0, 0, 0, 0},
};
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;
printf("Our love is %s!/n", l_opt_arg);
break;
}
}
return 0;
}
[root@localhost wyp]# gcc -o getopt getopt.c
[root@localhost wyp]# ./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!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区三区直播精品电影| 91精品国产色综合久久不卡98| 亚洲美女在线观看| 午夜精品福利电影| 亚洲成人网av| 国产色视频一区| 国产精品美女网站| 日本一区二区在线播放| 亚洲午夜色婷婷在线| 亚洲精品v欧美精品v日韩精品| 久久91精品国产| 国产精品视频久久久| 国产精品福利在线观看网址| 亚洲色在线视频| 尤物九九久久国产精品的分类| 国产香蕉一区二区三区在线视频| 国产日韩在线播放| 亚洲福利在线视频| 国产999在线观看| 4444欧美成人kkkk| 亚洲黄色有码视频| 国产精品网址在线| 亚洲国产天堂久久综合网| 中文精品99久久国产香蕉| 亚洲国产另类 国产精品国产免费| 国产精品www网站| 久久伊人精品一区二区三区| 成人av电影天堂| 亚洲最大的av网站| 日本成人在线视频网址| 亚洲免费视频一区二区| 中文字幕国产精品久久| 亚洲精品一区av在线播放| 92看片淫黄大片欧美看国产片| 国内伊人久久久久久网站视频| 欧美视频在线免费看| 久久久女人电视剧免费播放下载| 国产精品丝袜久久久久久不卡| 日韩精品中文字幕在线播放| 中文字幕一区二区三区电影| 日韩欧美在线免费观看| 欧美理论电影网| 97在线精品视频| 欧美极品第一页| 亚洲免费一级电影| 久久999免费视频| 日韩欧美在线国产| 久久影院中文字幕| 亚洲综合色av| 亚洲国产精品电影在线观看| 久久久久久欧美| 久久久999国产| 两个人的视频www国产精品| 91精品国产91久久久久| 国产日韩中文在线| 久久精品夜夜夜夜夜久久| 性色av一区二区三区红粉影视| 亚洲精品自在久久| 日韩女优人人人人射在线视频| 日韩精品在线看| 57pao国产成人免费| 国产一区二区黑人欧美xxxx| 日本不卡高字幕在线2019| 亚洲一区免费网站| 亚洲人精品午夜在线观看| 久久全国免费视频| 欧美做爰性生交视频| 亚洲视频欧洲视频| 色综合久综合久久综合久鬼88| 亚洲精品一区二区三区不| 久久成人这里只有精品| 国产亚洲精品久久久久久777| 精品久久久久久中文字幕大豆网| 在线免费观看羞羞视频一区二区| 亚洲情综合五月天| 久久69精品久久久久久久电影好| 国产精品一区二区av影院萌芽| 国产精品永久免费观看| 久久精品久久久久| 亚洲成人在线网| 国产美女精品免费电影| 在线观看亚洲视频| 精品中文字幕在线2019| 不卡伊人av在线播放| 国产香蕉一区二区三区在线视频| 久久免费视频网| 亚洲肉体裸体xxxx137| 国产午夜精品理论片a级探花| 亚洲国产精品人久久电影| 精品国产区一区二区三区在线观看| 欧美另类在线观看| 欧美壮男野外gaytube| 97精品视频在线观看| 欧美成年人视频| 欧美性xxxx极品高清hd直播| 欧美一区二区视频97| 最近2019免费中文字幕视频三| 97国产精品免费视频| 成人免费看吃奶视频网站| 欧美综合第一页| 91av网站在线播放| 国产成人精品av| 日韩欧美在线观看| 精品夜色国产国偷在线| 国产精品久久久久一区二区| 国产精品爽爽ⅴa在线观看| 91国内免费在线视频| 亚洲一区中文字幕在线观看| 亚洲一品av免费观看| 日韩精品在线免费观看视频| 日韩精品福利在线| 中文字幕亚洲图片| 国产亚洲精品美女久久久久| 成人在线播放av| 理论片在线不卡免费观看| 狠狠色狠狠色综合日日五| 91精品国产成人www| 国内精品小视频在线观看| 欧美成人sm免费视频| 久久久久久久999精品视频| 国产免费一区视频观看免费| 色久欧美在线视频观看| 国产一区二区香蕉| 国产精品美女网站| 欧美极品少妇与黑人| 亚洲精品日韩激情在线电影| 国产欧美日韩中文字幕在线| 在线国产精品播放| 91av视频导航| 国产精品福利久久久| 国产一区二区美女视频| 欧美成人精品在线观看| xvideos成人免费中文版| 欧美日韩免费看| 国产精品色午夜在线观看| 亚洲精品永久免费| 欧美激情精品在线| 在线日韩中文字幕| 成人亚洲综合色就1024| 久久亚洲精品视频| 成人黄色免费网站在线观看| 97涩涩爰在线观看亚洲| 色妞欧美日韩在线| 亚洲精品视频播放| 欧美成人小视频| 国产第一区电影| 68精品久久久久久欧美| 久久久国产成人精品| 亚洲片在线观看| 国产91ⅴ在线精品免费观看| 亚洲最大福利视频网| 日产精品久久久一区二区福利| 亚洲九九九在线观看| 欧美激情2020午夜免费观看| 欧美最猛性xxxx| 日韩hd视频在线观看| 亚州精品天堂中文字幕| 91精品视频在线| 欧美日韩国产中文精品字幕自在自线| 国产一区二区三区在线免费观看| 成人黄色大片在线免费观看| 亚洲精品电影在线观看| 亚洲aⅴ男人的天堂在线观看| 亚洲精品久久久久久久久|