衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux程序之可變參數(shù)&&選項(xiàng)那些事

Dp1040 ? 來(lái)源:一口Linux ? 2023-11-25 09:56 ? 次閱讀

一、linux應(yīng)用程序如何接收參數(shù)?

1、argc、argv

Linux應(yīng)用程序執(zhí)行時(shí),我們往往通過(guò)命令行帶入參數(shù)給程序,比如:

ls/dev/-l

其中參數(shù) /dev/、**-l**都是作為參數(shù)傳遞給命令ls

應(yīng)用程序又是如何接收這些參數(shù)的?

通常應(yīng)用程序都是從main函數(shù)開(kāi)始執(zhí)行,傳統(tǒng)的main函數(shù)風(fēng)格如下:

intmain(intargc,char*argv[])
argc:
程序的命令行參數(shù)的數(shù)量,用于統(tǒng)計(jì)參數(shù)數(shù)量。
argv:
是一個(gè)指向一個(gè)字符串?dāng)?shù)組的指針,數(shù)組包含了參數(shù),每個(gè)字符串就是一個(gè)參數(shù),最后一個(gè)元素為0。
過(guò)一般習(xí)慣使用多級(jí)指針來(lái)操作字符串。

*charargv[]有時(shí)候我們也寫成charargv

**argv[]**是一個(gè)存放字符類型元素地址的數(shù)組。

因?yàn)?C 中是有字符串的概念的:將每個(gè)字符存放在 char 數(shù)組,最后一個(gè)元素為****表示字符串的結(jié)束。

**printf(%s)**就是輸出字符串。

并且一般使用argv指針來(lái)訪問(wèn)、處理argv[]數(shù)組的內(nèi)容。

C語(yǔ)言中,數(shù)組就是一個(gè)指針加偏移量。

所以argv則是指向一個(gè)指針數(shù)組argv[]的指針,不用定義,直接可以用。

在argv[]數(shù)組中存放的的指針指向輸入命令的各部分(調(diào)用程序、選項(xiàng)、參數(shù))。

2、舉例

下面我們用一個(gè)實(shí)例來(lái)理解argc和argv

/*
*argc:命令行參數(shù)的個(gè)數(shù)
*argv:字符指針數(shù)組(指向各個(gè)命令行參數(shù)的字符指針?biāo)鶚?gòu)成的數(shù)組)
*/
intmain(intargc,char*argv[])//接收命令行參數(shù)
{
printf("argc=%d
",argc);
for(inti=0;iprintf("argv[%d]:%s
",i,argv[i]);//遍歷字符指針數(shù)組argv
}
return0;
}

執(zhí)行結(jié)果:

peng@ubuntu:~/work$./peng arg1 arg2 arg3
argc=4
argv[0]:./peng
argv[1]:arg1
argv[2]:arg2
argv[3]:arg3

參數(shù)與argc,argv關(guān)系如下:cddadca2-8b2a-11ee-939d-92fbcf53809c.png

二、選項(xiàng)

1、選項(xiàng)含義

linux程序除了上述情況以外,我們還經(jīng)常會(huì)遇到一個(gè)使用方法就是選項(xiàng)應(yīng)用,

比如:ping命令

peng@ubuntu:~/work$ping-h
Usage:ping[-aAbBdDfhLnOqrRUvV][-c count][-i interval][-I interface]
[-m mark][-M pmtudisc_option][-l preload][-p pattern][-Q tos]
[-s packetsize][-S sndbuf][-t ttl][-T timestamp_option]
[-w deadline][-W timeout][hop1...]destination

參數(shù)含義:

-a:嘗試將IP地址解析為主機(jī)名。
-A:使用響應(yīng)數(shù)據(jù)包中的附加數(shù)據(jù)。
-b:允許ping廣播地址。
-B:不允許ping廣播地址。
-c count:設(shè)置要發(fā)送的數(shù)據(jù)包數(shù)量。
-d:使用SO_DEBUG選項(xiàng)。
-D:不將socket設(shè)為分離模式。
-f:向目標(biāo)發(fā)送一個(gè)“強(qiáng)制”數(shù)據(jù)包。
-h:顯示幫助信息。
-i interval:設(shè)置發(fā)送數(shù)據(jù)包之間的時(shí)間間隔。
-I interface:設(shè)置要使用的網(wǎng)絡(luò)接口。
-l preload:設(shè)置發(fā)送的數(shù)據(jù)包數(shù)量。
-m mark:設(shè)置ping數(shù)據(jù)包的標(biāo)記。
-M pmtudisc_option:設(shè)置MTU發(fā)現(xiàn)選項(xiàng)。
-n:不要將IP地址解析為主機(jī)名。
-O:?jiǎn)⒂迷驾敵觥?-p pattern:設(shè)置數(shù)據(jù)包的模式。
-Q tos:設(shè)置服務(wù)類型。
-r:不使用路由表,直接發(fā)送數(shù)據(jù)包到目標(biāo)主機(jī)。
-R:?jiǎn)⒂糜涗浡酚伞?-s packetsize:設(shè)置數(shù)據(jù)包的大小。
-S sndbuf:設(shè)置套接字的發(fā)送緩沖區(qū)大小。
-t ttl:設(shè)置數(shù)據(jù)包的TTL值。
-T timestamp_option:設(shè)置時(shí)間戳選項(xiàng)。
-U:使用UDP數(shù)據(jù)包。
-v:顯示詳細(xì)的ping命令輸出。
-V:顯示ping命令的版本信息。
-w deadline:設(shè)置等待響應(yīng)的時(shí)間。
-W timeout:設(shè)置等待響應(yīng)的超時(shí)時(shí)間。

destination:指定要ping的目標(biāo)主機(jī)或IP地址。

這些-開(kāi)頭的都是選項(xiàng), []表示可選的意思

[-aAbBdDfhLnOqrRUvV]是無(wú)參的選項(xiàng)
[-c count][-i interval][-I interface]
[-m mark][-M pmtudisc_option][-l preload][-p pattern][-Q tos]
[-s packetsize][-S sndbuf][-t ttl][-T timestamp_option]
[-w deadline][-W timeout][hop1...]這些都是有參數(shù)的選項(xiàng)
destination必須填寫的參數(shù)

前輩們利用這點(diǎn)發(fā)明了“UNIX 風(fēng)格”的命令,選項(xiàng)前面加一個(gè)橫杠-,用于區(qū)分選項(xiàng)和參數(shù)。

2、程序如何區(qū)分參數(shù)和選項(xiàng)?

在程序的代碼實(shí)現(xiàn)中,按照 UNIX 的代碼慣例,上來(lái)直接跳過(guò)第一個(gè),然后判斷指針指向的字符串第一個(gè)字符是不是-,如果是的,那么進(jìn)入一個(gè)switch判斷,用case列出多種支持的情況下,應(yīng)該執(zhí)行什么代碼。

例如下面這樣就可以判斷選項(xiàng)和處理參數(shù):

intc;
while(--argc>0&&(*++argv)[0]=='-'{
while(c=*++argv[0]{
switch(c){
case'x':
...
break;
case'n':
...
break;
default:
printf("xxx:illegal opyion%c
",c);
...
break;
}
}
}

3、getopt、getopt_long

事實(shí)這么處理選項(xiàng)參數(shù)是比較麻煩的,

linux提供了選項(xiàng)解析的函數(shù):

//頭文件
#include
#include/*所在頭文件*/
intgetopt(intargc,char*constargv[],constchar*optstring);
intgetopt_long(intargc,char*constargv[],constchar*optstring,
conststruct option*longopts,int*longindex);
intgetopt_long_only(intargc,char*constargv[],constchar*optstring,
conststruct option*longopts,int*longindex);
externchar*optarg;/*系統(tǒng)聲明的全局變量*/
externintoptind,opterr,optopt;

三、getopt

1、定義

intgetopt(intargc,char*constargv[],constchar*optstring);
功能:
getopt是用來(lái)解析命令行選項(xiàng)參數(shù)的,但是只能解析短選項(xiàng):**-d100**,不能解析長(zhǎng)選項(xiàng):**--prefix**
參數(shù)
argc:
main()函數(shù)傳遞過(guò)來(lái)的參數(shù)的個(gè)數(shù)
argv:
main()函數(shù)傳遞過(guò)來(lái)的參數(shù)的字符串指針數(shù)組
optstring:
選項(xiàng)字符串,告知getopt()可以處理哪個(gè)選項(xiàng)以及哪個(gè)選項(xiàng)需要參數(shù)
返回:
如果選項(xiàng)成功找到,返回選項(xiàng)字母;如果所有命令行選項(xiàng)都解析完畢,返回-1;
如果遇到選項(xiàng)字符不在 optstring 中,返回字符‘?’;
如果遇到丟失參數(shù),那么返回值依賴于optstring中第一個(gè)字符,
如果第一個(gè)字符是‘:’則返回’:‘,否則返回’?'并提示出錯(cuò)誤信息。

2、optstring 含義 【重要】

下邊重點(diǎn)舉例說(shuō)明optstring的格式意義:

char*optstring=“ab:”;
單個(gè)字符a 表示選項(xiàng)a沒(méi)有參數(shù)格式:-a即可,不加參數(shù)
單字符加冒號(hào)b:表示選項(xiàng)b有且必須加參數(shù)格式:-b 100或-b100,但-b=100錯(cuò)
單字符加2冒號(hào)c::表示選項(xiàng)c可以有,也可以無(wú)格式:-c200,其它格式錯(cuò)誤

上面這個(gè) optstring 在傳入之后,getopt 函數(shù)將依次檢查命令行是否指定了 -a, -b, -c(這需要多次調(diào)用 getopt 函數(shù),直到其返回-1),當(dāng)檢查到上面某一個(gè)參數(shù)被指定時(shí),函數(shù)會(huì)返回被指定的參數(shù)名稱(即該字母)

系統(tǒng)聲明的4個(gè)全局變量含義如下:

optarg ——指向當(dāng)前選項(xiàng)參數(shù)(如果有)的指針。
optind ——再次調(diào)用 getopt()時(shí)的下一個(gè) argv指針的索引。
optopt ——最后一個(gè)未知選項(xiàng)。
opterr-——如果不希望getopt()打印出錯(cuò)信息,則只要將全域變量opterr設(shè)為0即可。

3、實(shí)例

說(shuō)千道萬(wàn),不如來(lái)一個(gè)實(shí)例:

#include
#include
#include
intmain(intargc,char*argv[])
{
intopt;
char*string="a:c:d";
while((opt=getopt(argc,argv,string))!=-1)
{
printf("opt=%c		",opt);
printf("optarg=%s		",optarg);
printf("optind=%d		",optind);
printf("argv[optind]=%s
",argv[optind]);
}
}
  • 正確輸入?yún)?shù),執(zhí)行結(jié)果如下:

peng@ubuntu:~/work/test$./peng-a100-b 200-c 300-d
opt=aoptarg=100optind=2argv[optind]=-b
opt=boptarg=200optind=4argv[optind]=-c
opt=coptarg=300optind=6argv[optind]=-d
opt=doptarg=(null)optind=7argv[optind]=(null)

或者

ork/test$./peng-a100-b200-c300-d
opt=aoptarg=100optind=2argv[optind]=-b200
opt=boptarg=200optind=3argv[optind]=-c300
opt=coptarg=300optind=4argv[optind]=-d
opt=doptarg=(null)optind=5argv[optind]=(null)
  • 輸入選項(xiàng)參數(shù)錯(cuò)誤的情況

peng@ubuntu:~/work/test$./peng-a 100-b 200-c 300-d
opt=aoptarg=(null)optind=2argv[optind]=100
opt=boptarg=200optind=5argv[optind]=-c
opt=coptarg=300optind=7argv[optind]=-d
opt=doptarg=(null)optind=8argv[optind]=(null)

導(dǎo)致解析錯(cuò)誤,第一個(gè) optarg = null,實(shí)際輸入?yún)?shù) 100,由于格式不正確造成的(可選參數(shù)格式固定)

  • 參數(shù)丟失,也會(huì)導(dǎo)致錯(cuò)誤
peng@ubuntu:~/work/test$./peng-a-b 200-c
opt=aoptarg=(null)optind=2argv[optind]=-b
opt=boptarg=200optind=4argv[optind]=-c
./peng:option requires an argument--'c'
opt=?optarg=(null)optind=5argv[optind]=(null)

c選項(xiàng)是必須有參數(shù)的

  • 命令行選項(xiàng)未定義,-e選項(xiàng)未在optstring中定義,會(huì)報(bào)錯(cuò):
peng@ubuntu:~/work/test$./peng-t
./peng:invalid option--'t'
opt=?optarg=(null)optind=2argv[optind]=(null)

四、getopt_long

1、定義

intgetopt_long(intargc,char*constargv[],constchar*optstring,
conststruct option*longopts,int*longindex);
功能:
包含 getopt 功能,增加了解析長(zhǎng)選項(xiàng)的功能如:--prefix --help
參數(shù):
longopts
指明了長(zhǎng)參數(shù)的名稱和屬性
longindex
如果longindex非空,它指向的變量將記錄當(dāng)前找到參數(shù)符合longopts里的第幾個(gè)元素的描述,即是longopts的下標(biāo)值
返回:
對(duì)于短選項(xiàng),返回值同 getopt 函數(shù);
對(duì)于長(zhǎng)選項(xiàng),
如果flag是NULL,返回val,否則返回0;
對(duì)于錯(cuò)誤情況返回值同getopt函數(shù)

2、struct option

structoption{
constchar*name;/*參數(shù)名稱*/
inthas_arg;/*指明是否帶有參數(shù)*/
int*flag;/*flag=NULL時(shí),返回value;不為空時(shí),*flag=val,返回0*/
intval;/*用于指定函數(shù)找到選項(xiàng)的返回值或flag非空時(shí)指定*flag的值*/
};

參數(shù)has_arg 說(shuō)明:has_arg 指明是否帶參數(shù)值,其數(shù)值可選:

no_argument
表明長(zhǎng)選項(xiàng)不帶參數(shù),如:–name, --help
required_argument
表明長(zhǎng)選項(xiàng)必須帶參數(shù),如:–prefix /root或--prefix=/root
optional_argument
表明長(zhǎng)選項(xiàng)的參數(shù)是可選的,如:–help或–prefix=/root,其它都是錯(cuò)誤

3、實(shí)例

#include
#include
#include
intmain(intargc,char*argv[])
{
intopt;
intdigit_optind=0;
intoption_index=0;
char*string="a:c:d";
staticstructoptionlong_options[]=
{
{"reqarg",required_argument,NULL,'r'},
{"optarg",optional_argument,NULL,'o'},
{"noarg",no_argument,NULL,'n'},
{NULL,0,NULL,0},
};
while((opt=getopt_long_only(argc,argv,string,long_options,&option_index))!=-1)
{
printf("opt=%c		",opt);
printf("optarg=%s		",optarg);
printf("optind=%d		",optind);
printf("argv[optind]=%s		",argv[optind]);
printf("option_index=%d
",option_index);
}
}
  • 正確執(zhí)行命令

peng@ubuntu:~/work/test$./long--reqarg 100--optarg=200--noarg
opt=roptarg=100optind=3argv[optind]=--optarg=200option_index=0
opt=ooptarg=200optind=4argv[optind]=--noargoption_index=1
opt=noptarg=(null)optind=5argv[optind]=(null)option_index=2

或者

peng@ubuntu:~/work/test$./long–reqarg=100--optarg=200--noarg
opt=ooptarg=200optind=3argv[optind]=--noargoption_index=1
opt=noptarg=(null)optind=4argv[optind]=(null)option_index=2
  • 可選選項(xiàng)可以不給參數(shù)

peng@ubuntu:~/work/test$./long--reqarg 100--optarg--noarg
opt=roptarg=100optind=3argv[optind]=--optargoption_index=0
opt=ooptarg=(null)optind=4argv[optind]=--noargoption_index=1
opt=noptarg=(null)optind=5argv[optind]=(null)option_index=2
  • 輸入長(zhǎng)選項(xiàng)錯(cuò)誤的情況

peng@ubuntu:~/work/test$./long--reqarg 100--optarg 200--noarg
opt=roptarg=100optind=3argv[optind]=--optargoption_index=0
opt=ooptarg=(null)optind=4argv[optind]=200option_index=1
opt=noptarg=(null)optind=6argv[optind]=(null)option_index=2

五、getopt_long_only

getopt_long_only 函數(shù)與 getopt_long 函數(shù)使用相同的參數(shù)表,在功能上基本一致

只是 getopt_long 只將 --name 當(dāng)作長(zhǎng)參數(shù),但 getopt_long_only 會(huì)將 --name 和 -name 兩種選項(xiàng)都當(dāng)作長(zhǎng)參數(shù)來(lái)匹配

getopt_long_only 如果選項(xiàng) -name 不能在 longopts 中匹配,但能匹配一個(gè)短選項(xiàng),它就會(huì)解析為短選項(xiàng)。

六、綜合實(shí)例

下面這個(gè)例子,是從開(kāi)源項(xiàng)目ifplug提取出來(lái)的命令提取小例子,

大家可以根據(jù)自己需要,基于這個(gè)框架,定制自己的程序。

#define_GNU_SOURCE
#include
#include
#include
#include
#include
#include
#include

#defineETHCHECKD_VERSION"1.1"


intdelay_up=0;
char*interface="eth0";


voidusage(char*p){
if(strrchr(p,'/'))
p=strchr(p,'/')+1;

printf("%s[options]
"
"-i--iface=IFACESpecify ethernet interface(%s)
"
"-d--delay-up=SECSSpecify delay time(%i)
"
"-h--helpShow this help
",
p,
interface,
delay_up);
}

voidparse_args(intargc,char*argv[]){
staticstructoptionlong_options[]={

{"iface",required_argument,0,'i'},
{"delay-up",required_argument,0,'d'},
{"help",no_argument,0,'h'},
{"version",no_argument,0,'v'},
{0,0,0,0}
};
intoption_index=0;
inthelp=0,_kill=0,_check=0,_version=0,_suspend=0,_resume=0,_info=0;

for(;;){
intc;

if((c=getopt_long(argc,argv,"ihv",long_options,&option_index))0)
break;

switch(c){
case'i':
interface=strdup(optarg);
printf("interface%s
",interface);
break;
case'd':
delay_up=atoi(optarg);
printf("delay_up%d
",delay_up);
break;
case'h':
usage(argv[0]);
break;
case'v':
printf("peng"ETHCHECKD_VERSION"
");
break;
default:
fprintf(stderr,"Unknown parameter.
");
exit(1);
}
}

}

staticvolatileintalarmed=0;

intmain(intargc,char*argv[]){

parse_args(argc,argv);
return0;
}

下面是測(cè)試結(jié)果

  • 短選項(xiàng)
peng@ubuntu:~/work/test$./param-h
param[options]
-i--iface=IFACESpecify ethernet interface(eth0)
-d--delay-up=SECSSpecify delay time(0)
-h--helpShow thishelp
peng@ubuntu:~/work/test$./param-v
peng 1.1

peng@ubuntu:~/work/test$./param-vh
peng 1.1
param[options]
-i--iface=IFACESpecify ethernet interface(eth0)
-d--delay-up=SECSSpecify delay time(0)
-h--helpShow thishelp

peng@ubuntu:~/work/test$./param-i eth3-d 15
interface eth3
delay_up 15


peng@ubuntu:~/work/test$./param-i eth3-d 15-h
interface eth3
delay_up 15
param[options]
-i--iface=IFACESpecify ethernet interface(eth3)
-d--delay-up=SECSSpecify delay time(15)
-h--helpShow thishelp
  • 長(zhǎng)選項(xiàng)

peng@ubuntu:~/work/test$./param--help
param[options]
-i--iface=IFACESpecify ethernet interface(eth0)
-d--delay-up=SECSSpecify delay time(0)
-h--helpShow thishelp

peng@ubuntu:~/work/test$./param--version
peng 1.1

peng@ubuntu:~/work/test$./param--iface eth3--delay-up 15
interface eth3
delay_up 15
talk is cheap!
testthis code!

快操練起來(lái)吧?。?!


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210395
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137714
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    417

    瀏覽量

    26028

原文標(biāo)題:Linux程序之可變參數(shù)&&選項(xiàng)那些事

文章出處:【微信號(hào):玩點(diǎn)嵌入式,微信公眾號(hào):玩點(diǎn)嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Proteus程序AMP應(yīng)用LEDDISP

    Proteus程序AMP應(yīng)用LEDDISP
    發(fā)表于 01-18 17:41 ?2次下載

    Proteus程序AMP應(yīng)用LEDCON

    Proteus程序AMP應(yīng)用LEDCON
    發(fā)表于 01-18 17:41 ?8次下載

    Proteus程序AMP應(yīng)用KEYIN

    Proteus程序AMP應(yīng)用KEYIN,好東西,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-18 17:41 ?3次下載

    Proteus程序AMP應(yīng)用LCD

    Proteus程序AMP應(yīng)用LCD,好東西,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-18 17:41 ?18次下載

    Proteus程序AMP應(yīng)用INC

    Proteus程序AMP應(yīng)用INC,好東西,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-18 17:41 ?5次下載

    Proteus程序AMP應(yīng)用EINT01

    Proteus程序AMP應(yīng)用EINT01
    發(fā)表于 01-18 17:43 ?8次下載

    Proteus程序AMP應(yīng)用TIMERLED

    Proteus程序AMP應(yīng)用TIMERLED
    發(fā)表于 01-18 17:43 ?4次下載

    Proteus程序AMP應(yīng)用TimeLCD

    Proteus程序AMP應(yīng)用TimeLCD
    發(fā)表于 01-18 17:43 ?5次下載

    Proteus程序AMP應(yīng)用UART0

    Proteus程序AMP應(yīng)用UART0。
    發(fā)表于 01-18 17:43 ?2次下載

    Proteus程序AMP應(yīng)用RTC

    Proteus程序AMP應(yīng)用RTC,好東西,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-18 17:43 ?4次下載

    Proteus程序AMP應(yīng)用SPI

    Proteus程序AMP應(yīng)用SPI,好東西,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-18 17:43 ?7次下載

    Proteus程序AMP應(yīng)用TIMEROUT

    Proteus程序AMP應(yīng)用TIMEROUT
    發(fā)表于 01-18 17:43 ?6次下載

    Proteus程序AMP應(yīng)用PWM

    Proteus程序AMP應(yīng)用PWM,好東西,喜歡的朋友可以下載來(lái)學(xué)習(xí)。
    發(fā)表于 01-18 17:43 ?9次下載

    Proteus程序AMP應(yīng)用POWER

    Proteus程序AMP應(yīng)用POWER。
    發(fā)表于 01-18 17:44 ?5次下載

    Proteus程序AMP應(yīng)用LEDHEX

    Proteus程序AMP應(yīng)用LEDHEX。
    發(fā)表于 01-18 17:44 ?5次下載
    东源县| 尊龙国际娱乐| 百家乐龙虎斗等| 百家乐官网透明发牌靴| 百家乐官网拍是什么| 百家乐游戏开发软件| 百家乐官网娱乐备用网址| 惠安县| 棋牌游戏评测网| 博狗百家乐的玩法技巧和规则| 皇室百家乐娱乐城| 云鼎百家乐官网作弊| 赌百家乐官网波音备用网| 信誉博彩网| 大发888 娱乐| 网上百家乐赌| 百家乐赌博现金网| 打百家乐的技术| 猪猪网百家乐官网软件| 乐宝百家乐官网娱乐城| 大发888分享| 利都百家乐国际赌场娱乐网规则| 金盈会百家乐现金网| 博御国际| 大发888娱乐能借钱| 百家乐缩水软件| 澳门百家乐新濠天地| 百家乐庄闲当哪个好| 免费百家乐官网过滤软件| 机械百家乐官网技巧| 百家乐官网娱乐送白菜| 百家乐官网玩揽法的论坛| 太阳城百家乐官网娱乐开户| 顺义区| 武汉市| 华宝娱乐城| 皇冠官方网址| 波克棋牌官网| 大发888登不上| 大发888娱乐城俄罗斯| 百家乐过滤|