成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > Lua和C語言的交互詳解

Lua和C語言的交互詳解

熱門標(biāo)簽:揚州電銷外呼系統(tǒng)軟件 武漢百應(yīng)人工智能電銷機器人 上海企業(yè)外呼系統(tǒng)排名 開通400電話申請流程 電腦外呼系統(tǒng)輻射大嗎 如何利用高德地圖標(biāo)注家 400手機電話免費辦理 智能語音電銷的機器人 百度地圖標(biāo)注位置網(wǎng)站

前言

對于Lua的基礎(chǔ)總結(jié)總算告一段落了,從這篇博文開始,我們才真正的進入Lua的世界,一個無聊而又有趣的世界。來吧。

Lua語言是一種嵌入式語言,它本身的威力有限;當(dāng)Lua遇見了C,那它就展示了它的強大威力。C和Lua是可以相互調(diào)用的。第一種情況是,C語言擁有控制權(quán),Lua是一個庫,這種形式中的C代碼稱為“應(yīng)用程序代碼”;第二種情況是,Lua擁有控制權(quán),C語言是一個庫,這個時候C代碼就是“庫代碼”?!皯?yīng)用程序代碼”和“庫代碼”都使用同樣的API來與Lua通信,這些API就稱為C API。

C API是一組能使C代碼與Lua交互的函數(shù),包括很多對Lua代碼的操作。如何操作,操作什么,我們的文章我都會一一總結(jié)。C API是非常靈活而強大的。為了表示它的NB之處,不先來一段小的DEMO程序展示一下,怎么能夠行呢?

復(fù)制代碼 代碼如下:

#include iostream>
#include string.h>
 
extern "C"
{
    #include "lua.h"
    #include "lauxlib.h"
    #include "lualib.h"
}
int main()
{
    char buff[256] = {0};
    int error;
    lua_State *L = luaL_newstate(); // 打開Lua
    luaL_openlibs(L); // 打開標(biāo)準(zhǔn)庫
    while (fgets(buff, sizeof(buff), stdin) != NULL)
    {
        error = luaL_loadbuffer(L, buff, strlen(buff), "line")
            || lua_pcall(L, 0, 0, 0);
        if (error)
        {
            fprintf(stderr, "%s", lua_tostring(L, -1));
            lua_pop(L, 1); // 從棧中彈出錯誤消息
        }
    }
 
    lua_close(L);
    return 0;
}

如果你沒有接觸過C API,對于上面這段代碼,你肯定不會明白它是干什么的。什么也不說,你運行一下吧。然后輸入Lua語句,看看運行結(jié)果。

先對上述代碼引入的幾個頭文件進行解釋一下:

頭文件lua.h定義了Lua提供的基礎(chǔ)函數(shù),包括創(chuàng)建Lua環(huán)境、調(diào)用Lua函數(shù)、讀寫Lua環(huán)境中全局變量,以及注冊供Lua調(diào)用的新函數(shù)等等;

頭文件lauxlib.h定義了輔助庫提供的輔助函數(shù),它的所有定義都以LuaL_開頭。輔助庫是一個使用lua.h中API編寫出的一個較高的抽象層。Lua的所有標(biāo)準(zhǔn)庫編寫都用到了輔助庫;輔助庫主要用來解決實際的問題。輔助庫并沒有直接訪問Lua的內(nèi)部,它都是用官方的基礎(chǔ)API來完成所有工作的;

頭文件lualib.h定義了打開標(biāo)準(zhǔn)庫的函數(shù)。Lua庫中沒有定義任何全局變量。它將所有的狀態(tài)都保存在動態(tài)結(jié)構(gòu)lua_State中,所有的C API都要求傳入一個指向該結(jié)構(gòu)的指針。luaL_newstate函數(shù)用于創(chuàng)建一個新環(huán)境或狀態(tài)。當(dāng)luaL_newstate創(chuàng)建一個新的環(huán)境時,新的環(huán)境中并沒有包含預(yù)定義的函數(shù)(eg.print)。為了使Lua保持靈活,小巧,所有的標(biāo)準(zhǔn)庫都被組織到了不同的包中。當(dāng)我們需要使用哪個標(biāo)準(zhǔn)庫時,就可以調(diào)用lualib.h中定義的函數(shù)來打開對應(yīng)的標(biāo)準(zhǔn)庫;而輔助函數(shù)luaL_openlibs則可以打開所有的標(biāo)準(zhǔn)庫。

頭文件說完了,如果對代碼中的extern “C”不懂的同學(xué),請看這里。然后,就沒有然后了,然后我就先不解釋了,等我將后面的內(nèi)容總結(jié)完,再回過頭來看,你會明白的更徹底。點擊這里去下載完整項目工程。

Lua和C語言通信的主要方法是一個無處不在的虛擬棧。幾乎所有的API調(diào)用都會操作這個棧上的值;所有的數(shù)據(jù)交換,無論是Lua到C語言或C語言到Lua都通過這個棧來完成。棧可以解決Lua和C語言之間存在的兩大差異,第一種差異是Lua使用垃圾收集,而C語言要求顯式地釋放內(nèi)存;第二種是Lua使用動態(tài)類型,而C語言使用靜態(tài)類型。

為了屏蔽C和Lua之間的差異性,讓彼此之間的交互變的通常,便出現(xiàn)了這個虛擬棧。棧中的每個元素都能保存任何類型的Lua值,當(dāng)在C代碼中要獲取Lua中的一個值時,只需調(diào)用一個Lua API函數(shù),Lua就會將指定值壓入棧中;要將一個值傳給Lua時,需要先將這個值壓入棧,然后調(diào)用Lua API,Lua就會獲得該值并將其從棧中彈出。為了將C類型的值壓入棧,或者從棧中獲取不同類型的值,就需要為每種類型定義一個特定的函數(shù)。是的,我們的確是這么干的。

Lua嚴(yán)格地按照LIFO規(guī)范來操作這個棧。但調(diào)用Lua時,Lua只會改變棧的頂部。不過,C代碼則有更大的自由度,它可以檢索棧中間的元素,甚至在棧的任意位置插入或刪除元素。

壓入棧

對于每種可以呈現(xiàn)在Lua中的C類型,API都有一個對應(yīng)的壓入函數(shù),我這里把它們都列出來:

復(fù)制代碼 代碼如下:

void lua_pushnil(lua_State *L);
void lua_pushboolean(lua_State *L, int bool);
void lua_pushnumber(lua_State *L, lua_Number n);
void lua_pushinteger(lua_State *L, lua_Integer n);
void lua_pushlstring(lua_State *L, const char *s, size_t len);
void lua_pushstring(lua_State *L, const char *s);

上面的函數(shù)非常簡單,從命名就能知道它們的含義。這里不多說。稍后提供詳細的實例代碼供參考。由于這個棧并不是無限大的,當(dāng)向棧中壓入一個元素時,應(yīng)該確保棧中具有足夠的空間。當(dāng)Lua啟動時,或Lua調(diào)用C語言時,棧中至少會有20個空閑的槽。這些空間一般情況下是足夠的,所有我們一般是不用考慮的,但總是會有特殊情況的,如果調(diào)用一個具有很多參數(shù)的函數(shù),就需要調(diào)用lua_checkstack來檢查棧中是否有足夠的空間。

查詢元素

API 使用索引來棧中的元素。第一個壓入棧中的元素索引為1,第二個壓入的元素所以為2,以此類推,直到棧頂。我們也可以用棧頂作為參考物,使用負數(shù)來訪問棧中的元素,此時,-1表示棧頂元素,-2表示棧頂下面的元素,以此類推。有的情況適合使用正數(shù)索引,而有的情況下適合使用負數(shù)索引,我們可以根據(jù)實際需求,靈活變通。

為了檢查一個元素是否為特定的類型,API提供了一系列的函數(shù)lua_is*,其中*可以是任意Lua類型。這些函數(shù)有l(wèi)ua_isnumber、lua_isstring和lua_istable等,所有這些函數(shù)都有同樣的原型:

復(fù)制代碼 代碼如下:

int lua_is*(lua_State *L, int index);

實際上,lua_isnumber不會檢查值是否為數(shù)字類型,而是檢查值是否能轉(zhuǎn)換為數(shù)字類型。lua_isstring也具有同樣的行為,這樣就出現(xiàn)一種狀況,對于能轉(zhuǎn)換成string的值,lua_isstring總是返回真,所以lua_is*這類函數(shù)在使用的時候,并不是非常的方便,所以,就出現(xiàn)了一個lua_type函數(shù),它會返回棧中元素的類型,每種類型都對應(yīng)一個常亮,這些常亮定義在頭文件lua.h中,它們是:
復(fù)制代碼 代碼如下:

/*
** basic types
*/
#define LUA_TNONE        (-1)
#define LUA_TNIL        0
#define LUA_TBOOLEAN        1
#define LUA_TLIGHTUSERDATA    2
#define LUA_TNUMBER        3
#define LUA_TSTRING        4
#define LUA_TTABLE        5
#define LUA_TFUNCTION        6
#define LUA_TUSERDATA        7
#define LUA_TTHREAD        8

如果要檢查一個元素是否為真正的字符串或數(shù)字(無需轉(zhuǎn)換),也可以使用這個函數(shù)。

取值

我們一般使用lua_to*函數(shù)用于從棧中獲取一個值,有以下常用的取值函數(shù):

復(fù)制代碼 代碼如下:

lua_Number      lua_tonumber (lua_State *L, int idx);
lua_Integer     lua_tointeger (lua_State *L, int idx);
int             lua_toboolean (lua_State *L, int idx);
const char     *lua_tolstring (lua_State *L, int idx, size_t *len);
size_t          lua_objlen (lua_State *L, int idx);
lua_CFunction   lua_tocfunction (lua_State *L, int idx);
void           *lua_touserdata (lua_State *L, int idx);
lua_State      *lua_tothread (lua_State *L, int idx);
const void     *lua_topointer (lua_State *L, int idx);

如果指定的元素不具有正確的類型,調(diào)用這些函數(shù)也不會有問題。在這種情況下,lua_toboolean、lua_tonumber、lua_tointeger和lua_objlen會返回0,而其它函數(shù)會返回NULL。lua_tolstring函數(shù)會返回一個指向內(nèi)部字符串副本的指針,并將字符串的長度存入最后一個參數(shù)len中。這個內(nèi)部副本不能修改,返回類型中的const也說明了這點。Lua保證只要這個對應(yīng)的字符串還在棧中,那么這個指針就是有效的。當(dāng)Lua調(diào)用的一個C函數(shù)返回時,Lua就會清空它的棧。這就有一條非常重要的規(guī)則:

復(fù)制代碼 代碼如下:

***不要在C函數(shù)之外使用在C函數(shù)內(nèi)獲得的指向Lua字符串的指針***

所有l(wèi)ua_tolstring返回的字符串在其末尾都會有一個額外的零,不過這些字符串中間也可能有零,字符串的長度通過第三個參數(shù)len返回,這才是真正的字符串長度。

lua_objlen函數(shù)可以返回一個對象的“長度”。對于字符串和table,這個值就是長度操作符“#”的結(jié)果。這個函數(shù)還可用于獲取一個“完全userdata”的大小,關(guān)于userdata,后面還會單獨總結(jié)。

其它棧操作

除了在C語言和棧之間交換數(shù)據(jù)的函數(shù)外,API還提供了以下這些用于普通棧操作的函數(shù):

復(fù)制代碼 代碼如下:

/*
** basic stack manipulation
*/
int   lua_gettop (lua_State *L);
void  lua_settop (lua_State *L, int idx);
void  lua_pushvalue (lua_State *L, int idx);
void  lua_remove (lua_State *L, int idx);
void  lua_insert (lua_State *L, int idx);
void  lua_replace (lua_State *L, int idx);

現(xiàn)在就來簡單的說說這幾個函數(shù),lua_gettop函數(shù)返回棧中元素的個數(shù),也可以說是棧頂元素的索引。lua_settop將棧頂設(shè)置為一個指定的位置,即修改棧中元素的數(shù)量,如果之前的棧頂比新設(shè)置的更高,那么高出來的這些元素會被丟棄;反之,會向棧中壓入nil來補足大?。槐热?,調(diào)用以下語句就能清空棧:

復(fù)制代碼 代碼如下:

lua_settop(L, 0);

也可以使用負數(shù)索引來使用lua_settop。lua_pushvalue函數(shù)會將指定索引上值得副本壓入棧。lua_remove刪除指定索引上的元素,并將該位置之上的所有元素下移以填補空缺。lua_insert會上移指定位置之上的所有元素以開辟一個槽空間,然后將棧頂元素移到該位置。lua_replace彈出棧頂?shù)闹?,并將該值設(shè)置到指定索引上,但它不會移動任何東西,只是替換了指定索引的值。說了這么多,總結(jié)了這么多,不來點真槍實干的,總是覺的很虛,上代碼。點擊這里去下載本篇博文中所有的代碼工程吧。

C API出錯了怎么辦?

沒有十全十美,沒有任何bug的程序的。是的,再NB的人寫的程序,也可能出現(xiàn)問題,有些問題不是我們控制范圍之內(nèi)的。既然我們無法控制問題的出現(xiàn),但是我們對問題出現(xiàn)以后的行為進行處理,比如:出現(xiàn)問題了,彈出一個友好的message,這聽起來還是不錯的,很多程序都是這么干的。好吧,伙計,如果C API出錯了怎么辦呢?

Lua中所有的結(jié)構(gòu)都是動態(tài)的,它們會根據(jù)需要來增長,或者縮小。是的,增長縮小,就涉及到內(nèi)存的開辟與釋放,這有可能會出錯的,雖然我知道這個概率是很低的,但是對于程序員來說,對于任何可能出現(xiàn)問題的地方都要進行處理。這里有兩種情況:

1.C調(diào)用Lua代碼;
2.Lua代碼調(diào)用C。

不是所有的API函數(shù)都會拋出異常。函數(shù)luaL_newstate、lua_load、lua_pcall和lua_close都是安全的。在第一種情況下,一般都是使用lua_pcall來運行Lua代碼,由于lua_pcall是在保護的情況下運行l(wèi)ua代碼,如果發(fā)生了內(nèi)存分配錯誤,lua_pcall會返回一個錯誤代碼,并將解釋器封固在一致的狀態(tài);如果要保護那些與Lua交互的C代碼,可以使用lua_cpcall,這個函數(shù)類似于lua_pcall。

對于Lua調(diào)用C,當(dāng)將新的C函數(shù)加入Lua時,可能會破壞內(nèi)存的結(jié)構(gòu)。當(dāng)我們?yōu)長ua編寫庫函數(shù)時(Lua調(diào)用C的函數(shù)),只有一種標(biāo)準(zhǔn)的錯誤處理方法。當(dāng)一個C函數(shù)檢測到一個錯誤時,它就應(yīng)該調(diào)用lua_error,lua_error函數(shù)會清理Lua中所有需要清理的東西,然后跳轉(zhuǎn)回發(fā)起執(zhí)行的那個lua_pcall,并附上一條錯誤消息。在后面的博文中,會有這方面的代碼實例的。

您可能感興趣的文章:
  • 簡單談?wù)刲ua和c的交互
  • Lua教程(二十):Lua調(diào)用C函數(shù)
  • C++中調(diào)用Lua函數(shù)實例
  • Lua中調(diào)用C++函數(shù)實例
  • Lua與C語言間的交互實例
  • Lua調(diào)用自定義C模塊
  • Lua和C++的通信流程分解
  • Lua中調(diào)用C語言函數(shù)實例
  • C#和lua相互調(diào)用的方法教程

標(biāo)簽:黑龍江 延邊 嘉峪關(guān) 張掖 宜賓 江西 武漢 新余

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua和C語言的交互詳解》,本文關(guān)鍵詞  Lua,和,語言,的,交互,詳解,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua和C語言的交互詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Lua和C語言的交互詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品亚洲a| 国产熟女高潮一区二区三区| 国产精品成人免费电影| 国产91色在线| 久草中文在线视频| 国产精品传媒麻豆hd| 亚洲欧美精品一区| 亚洲视频日韩| 精品一区二区三区久久| 亚洲高清乱码| 色五月激情五月| 男生和女生一起差差差视频| 国产精品一区免费观看| 久久99精品久久久久久久久久| 暗呦丨小u女国产精品| 另类图片亚洲另类| 国产精品88a∨| 国产99久久九九精品无码免费| 欧美视频在线一区二区三区| hd100%videos日本| 国产又猛又黄又爽| 在线电影看在线一区二区三区| 欧洲毛片视频| 性欧美freehd18| 麻豆91精品91久久久的内涵| 韩国中文字幕2020精品| 亚洲区国产区| 亚洲专区一二三| 北条麻妃一区二区三区在线观看| 大胸美女被爆操| 女同一区二区三区| 日韩爱爱小视频| 一区二区三区四区在线免费视频| 91ph在线| 欧美大香线蕉线伊人久久国产精品| 国产精品久久久久久久久久ktv| 日韩二区三区在线| av一区二区三区四区| 三妻四妾完整版在线观看电视剧| 国产亚洲色婷婷久久99精品91| 欧美一区二区人人喊爽| 在线观看欧美激情| 姑娘第5集在线观看免费好剧| 日韩一区二区免费高清| 中文字幕久精品免费视频| 黄色在线资源| 欧美一区二区三区久久综合| jizz国产在线| 日本韩国一区| 91av精品| 性欧美大战久久久久久久免费观看| 欧美日韩中文字幕在线| 欧美va亚洲va| 亚洲欧洲精品一区二区三区波多野1战4| 久久精品久久久久久久| 影音先锋男人在线资源| 免费又黄又爽又猛大片午夜| 蜜臀a∨国产成人精品| 野花视频免费在线观看| 丁香桃色午夜亚洲一区二区三区| 欧美va天堂在线| 成人av免费在线| 亚洲成人免费影院| 日韩二区三区四区| 国产大片中文字幕在线观看| 久久91精品国产91久久久| 青春草在线视频免费观看| 色av吧综合网| 成人做爰视频www| 欧美成人四级hd版| www在线免费观看| 黄色影院一级片| 热re99久久国产精品| 亚洲午夜网未来影院| 丝袜美腿玉足3d专区一区| 91精品国产综合久久精品app| 女人裸体免费网站| 懂色av成人一区二区三区| 久久中文欧美| 亚洲第一色网站| 国产成人精品午夜视频免费| 国模套图日韩精品一区二区| 波多野结衣三级在线| 99草草国产熟女视频在线| 日韩国产激情| 国产性生活免费视频| 亚洲精品456在线播放狼人| 精品国产福利一区二区在线| se69色成人网wwwsex| 亚洲欧美网站在线观看| 亚洲一区二区三区777| 亚洲免费观看| 免费av网址在线| 亚洲国产又黄又爽女人高潮的| 欧美天天影院| 日本福利视频在线| 99精品在线观看| 五十路六十路七十路熟婆| 一区二区三区成人| 天堂√最新版中文在线| 久久久国产在线视频| 宅男视频免费在线观看视频| 欧美一级精品| 三上悠亚在线一区| 17videosex性欧美| 成人激情综合网站| 九九热爱视频精品视频高清| 欧美黄污视频| 国产寡妇色xxⅹ交肉视频| 国产三级做爰在线观看| 亚洲激情网站| 欧美黄色高清视频| 国内精品久久久久影院色| 国产一区二区三区四区五区3d| 青青草这里只有精品| 91精品国产91久久久久久久久| 欧美国产视频一区二区| 欧洲一级毛片| 九九久久综合网站| 久久久夜色精品亚洲| 精品视频一区二区观看| 亚洲日本伊人| 一级二级在线观看| xxxxxxxxx欧美| 亚洲国产高清福利视频| 久久久久久网站| 免费大片在线观看| 男人操女人免费网站| 中文字幕视频二区| 欧美日韩精品欧美日韩精品| 伊人成人免费视频| 极品国产91在线网站| 国产性一乱一性一伧一色| 亚洲午夜激情| 欧美色欧美亚洲另类| 天堂网www在线观看| 大地资源网在线观看免费官网| 亚洲大尺度视频| 天天色天天干天天| 国产精品日本欧美一区二区三区| 国产极品一区| 国产99在线|亚洲| 不卡视频在线观看| 亚洲精品成人少妇| 国产成人免费观看网站| 亚洲成人三级在线| 99精品黄色片免费大全| 国产91精品久久久久久久网曝门| 亚洲国产精品久久久久久女王| 亚洲一级理论片| 四虎影视国产精品| 久久精品成人欧美大片古装| 伊人色综合久久久天天蜜桃| 欧美亚洲视频一区| 日本wwww视频| 日韩欧美在线字幕| 亚洲欧美日本免费| 日本精品人妻无码77777| 在线观看三级视频欧美| 视频一区在线播放| aa在线视频| 日韩一级欧美一级| 日韩人妻无码精品综合区| 日韩一级免费片| 香蕉视频在线播放| 美女一区2区| 国产成人拍精品视频午夜网站| 国产男男gay体育生白袜| 免费av在线电影| 国产激情综合五月久久| 日韩av一区二区三区四区| 亚洲综合精品在线| 日本一区二区三区中文字幕| 欧美午夜性色大片在线观看| 色欲AV无码精品一区二区久久| 秋霞电影网一区二区| 黑人操亚洲人| 国产精品美女午夜爽爽| 中文字幕一区免费在线观看| 国产精品旅馆在线| 亚洲free性xxxx护士hd| 成人免费直播live| 日本美女bbw| 日韩伦理一区二区| 午夜爽爽爽男女免费观看影院| 欧美另类网站| 日韩精品中文字幕有码专区| 亚洲激情图片qvod| 日韩中文字幕在线免费| 一区二区三区四区免费视频| 中文字幕在线不卡国产视频| 中文字幕一区二区人妻痴汉电车| 日韩精品无码一区二区三区| 欧美成人精品欧美一级| 日韩精品一区二区三区外面| 97精品久久久午夜一区二区三区| 污视频在线看| 91视频网址免费观看| 国产精品v一区二区三区| heyzo亚洲| 精品女同一区二区三区在线播放| 日韩电影在线观看永久视频免费网站| 欧美乱妇视频| 婷婷综合久久| 国产综合 伊人色| 毛片在线免费| 最近高清中文在线字幕在线观看1| 亚洲黄色小说图片| 免费涩涩18网站入口| 奴色虐av一区二区三区| 欧美高清一级片| brazzers在线观看| 精品国产制服丝袜高跟| 噜噜噜噜噜久久久久久91| 美女激情福利视频在线观看| 国产美女无遮挡永久免费| 四虎影视精品成人| 麻豆中文一区二区| 成人影视免费观看| jizz一区二区| 亚洲无人区一区| 少妇性色午夜淫片aaa播放| xxxxx性欧美特大| 中文字幕av免费在线观看| 国产视频1区| a级片一区二区| 天天草天天爽| 婷婷国产在线综合| 日韩av影片| 老熟妻内射精品一区| 在线观看av资源| 国产一区二区精品| 免费看国产一级片| 99sesese| 男女视频在线观看网站| 91精品国产高久久久久久五月天| 蜜桃自拍偷拍| 欧美极品在线| 在线观看91精品国产麻豆| 精品视频在线观看免费| 国产乱子伦农村叉叉叉| 销魂美女一区二区三区视频在线| 欧美日韩在线看| 国产伦精品一区二区三区四区免费| 青娱乐国产在线视频| 99久久国产免费| www.在线视频.com| 午夜性爽视频男人的天堂| 国产精品久久二区| 国产在线三区| 粉嫩的18在线观看极品精品| 波多野结衣视频观看| 99热国产在线观看| 日本中文在线播放| 青青草成人在线观看| 日韩在线观看网站| 中国美女乱淫免费看视频| 国产午夜精品一区二区理论影院| 色偷偷一区二区三区| 国产精品蜜臀| 欧美日韩一区二区三区在线电影| 精品久久久久久中文字幕人妻最新| 国产精品久久久久桃色tv| 久久精品一区二区三区资源网| 中文先锋资源| 国产黄色小视频在线观看| 蜜桃视频成人m3u8| 国产91精品久久久久久久网曝门| 青青草精品毛片| a级影片在线观看| 性直播体位视频在线观看| 日韩欧美视频专区| 亚洲色偷偷综合亚洲av伊人| 国产亚洲一区二区三区四区| 欧美日韩蜜桃| 国产视频三区四区| 亚洲黄色尤物视频| 熟女少妇内射日韩亚洲| 国产欧美精品一区aⅴ影院| 国产大片在线免费观看| 欧美另类亚洲| 精品少妇人妻一区二区黑料社区| 特级黄国产片一级视频播放| 哥也色在线视频| 日韩美女一区二区三区| 人人妻人人澡人人爽| 欧洲亚洲免费视频| www.91在线播放| 日韩av影片| 色88888久久久久久影院| 男女猛烈激情xx00免费视频| 免费一区二区三区| 亚洲欧洲美洲一区二区三区| 国产精品一区二三区| 校园春色亚洲色图| 欧美三级韩国三级日本一级| 成人黄色在线观看| 欧美精品日韩三级| 蜜桃国内精品久久久久软件9| 精品无码人妻一区| 国产天堂av在线| 成人免费短视频| 久久久噜久噜久久综合| 欧美tickling网站挠脚心| 精品国产18久久久久久二百| 欧美一区观看| 亚洲图片小说在线| 久久1电影院| 色香色香欲天天天影视综合网| 国产成人免费视频网站| 日本黄色片在线播放| 成人动漫视频在线| www.污视频| 国产精品欧美色图| 写真福利精品福利在线观看| 在线播放豆国产99亚洲| 特黄特色特刺激视频免费播放| 裤袜国产欧美精品一区| 久久蜜桃一区二区| 2019亚洲日韩新视频| 国产一区二区片| 九九热在线观看视频| 国产伦精品一区二区三区四区| 在线观看xxxxvideo| 亚洲一区二区三区精品中文字幕| 国自产拍在线网站网址视频| 蜜桃色永久入口| 一本一本久久a久久综合精品|