久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Python與C/C++的相互調用案例

瀏覽:85日期:2022-06-26 13:52:27
一、問題

Python模塊和C/C++的動態(tài)庫間相互調用在實際的應用中會有所涉及,在此作一總結。

二、Python調用C/C++1、Python調用C動態(tài)鏈接庫

Python調用C庫比較簡單,不經過任何封裝打包成so,再使用python的ctypes調用即可。

(1)C語言文件:pycall.c

/***gcc -o libpycall.so -shared -fPIC pycall.c*/#include <stdio.h>#include <stdlib.h>int foo(int a, int b){ printf('you input %d and %dn', a, b); return a+b;}

(2)gcc編譯生成動態(tài)庫libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++編譯生成C動態(tài)庫的代碼中的函數(shù)或者方法時,需要使用extern 'C'來進行編譯。

(3)Python調用動態(tài)庫的文件:pycall.py

import ctypesll = ctypes.cdll.LoadLibrary lib = ll('./libpycall.so') lib.foo(1, 3)print ’***finish***’

(4)運行結果:

Python與C/C++的相互調用案例

2、Python調用C++(類)動態(tài)鏈接庫

需要extern 'C'來輔助,也就是說還是只能調用C函數(shù),不能直接調用方法,但是能解析C++方法。不是用extern 'C',構建后的動態(tài)鏈接庫沒有這些函數(shù)的符號表。

(1)C++類文件:pycallclass.cpp

#include <iostream>using namespace std; class TestLib{ public: void display(); void display(int a);};void TestLib::display() { cout<<'First display'<<endl;}void TestLib::display(int a) { cout<<'Second display:'<<a<<endl;}extern 'C' { TestLib obj; void display() { obj.display(); } void display_int() { obj.display(2); }}

(2)g++編譯生成動態(tài)庫libpycall.so:g++ -o libpycallclass.so -shared -fPIC pycallclass.cpp。

(3)Python調用動態(tài)庫的文件:pycallclass.py

import ctypesso = ctypes.cdll.LoadLibrary lib = so('./libpycallclass.so') print ’display()’lib.display()print ’display(100)’lib.display_int(100)

(4)運行結果:

Python與C/C++的相互調用案例

3、Python調用C/C++可執(zhí)行程序

(1)C/C++程序:main.cpp

#include <iostream>using namespace std;int test(){ int a = 10, b = 5; return a+b;}int main(){ cout<<'---begin---'<<endl; int num = test(); cout<<'num='<<num<<endl; cout<<'---end---'<<endl;}

(2)編譯成二進制可執(zhí)行文件:g++ -o testmain main.cpp。

(3) Python調用程序:main.py

import commandsimport osmain = './testmain'if os.path.exists(main): rc, out = commands.getstatusoutput(main) print ’rc = %d, nout = %s’ % (rc, out) print ’*’*10f = os.popen(main) data = f.readlines() f.close() print data print ’*’*10os.system(main)

(4)運行結果:

Python與C/C++的相互調用案例

4、擴展Python(C++為Python編寫擴展模塊)

所有能被整合或導入到其它python腳本的代碼,都可以被稱為擴展??梢杂肞ython來寫擴展,也可以用C和C++之類的編譯型的語言來寫擴展。Python在設計之初就考慮到要讓模塊的導入機制足夠抽象。抽象到讓使用模塊的代碼無法了解到模塊的具體實現(xiàn)細節(jié)。Python的可擴展性具有的優(yōu)點:方便為語言增加新功能、具有可定制性、代碼可以實現(xiàn)復用等。

為 Python 創(chuàng)建擴展需要三個主要的步驟:創(chuàng)建應用程序代碼、利用樣板來包裝代碼和編譯與測試。

(1)創(chuàng)建應用程序代碼

#include <stdio.h>#include <stdlib.h>#include <string.h> int fac(int n){ if (n < 2) return(1); /* 0! == 1! == 1 */ return (n)*fac(n-1); /* n! == n*(n-1)! */}char *reverse(char *s){ register char t, /* tmp */ *p = s, /* fwd */ *q = (s + (strlen(s) - 1)); /* bwd */ while (p < q) /* if p < q */ { t = *p; /* swap & move ptrs */ *p++ = *q; *q-- = t; } return(s);}int main(){ char s[BUFSIZ]; printf('4! == %dn', fac(4)); printf('8! == %dn', fac(8)); printf('12! == %dn', fac(12)); strcpy(s, 'abcdef'); printf('reversing ’abcdef’, we get ’%s’n', reverse(s)); strcpy(s, 'madam'); printf('reversing ’madam’, we get ’%s’n', reverse(s)); return 0;}

上述代碼中有兩個函數(shù),一個是遞歸求階乘的函數(shù)fac();另一個reverse()函數(shù)實現(xiàn)了一個簡單的字符串反轉算法,其主要目的是修改傳入的字符串,使其內容完全反轉,但不需要申請內存后反著復制的方法。

(2)用樣板來包裝代碼

接口的代碼被稱為“樣板”代碼,它是 應用程序代碼與Python解釋器之間進行交互所必不可少的一部分。樣板主要分為4步:a、包含Python的頭文件;b、為每個模塊的每一個函數(shù)增加一個型如PyObject* Module_func()的包裝函數(shù);c、為每個模塊增加一個型如PyMethodDef ModuleMethods[]的數(shù)組;d、增加模塊初始化函數(shù)void initModule()。

#include <stdio.h>#include <stdlib.h>#include <string.h> int fac(int n){ if (n < 2) return(1); return (n)*fac(n-1);}char *reverse(char *s){ register char t, *p = s, *q = (s + (strlen(s) - 1)); while (s && (p < q)) { t = *p; *p++ = *q; *q-- = t; } return(s);}int test(){ char s[BUFSIZ]; printf('4! == %dn', fac(4)); printf('8! == %dn', fac(8)); printf('12! == %dn', fac(12)); strcpy(s, 'abcdef'); printf('reversing ’abcdef’, we get ’%s’n', reverse(s)); strcpy(s, 'madam'); printf('reversing ’madam’, we get ’%s’n', reverse(s)); return 0;}#include 'Python.h'static PyObject *Extest_fac(PyObject *self, PyObject *args){ int num; if (!PyArg_ParseTuple(args, 'i', &num)) return NULL; return (PyObject*)Py_BuildValue('i', fac(num));}static PyObject *Extest_doppel(PyObject *self, PyObject *args){ char *orig_str; char *dupe_str; PyObject* retval; if (!PyArg_ParseTuple(args, 's', &orig_str)) return NULL; retval = (PyObject*)Py_BuildValue('ss', orig_str, dupe_str=reverse(strdup(orig_str))); free(dupe_str); #防止內存泄漏 return retval;}static PyObject *Extest_test(PyObject *self, PyObject *args){ test(); return (PyObject*)Py_BuildValue('');}static PyMethodDefExtestMethods[] ={ { 'fac', Extest_fac, METH_VARARGS }, { 'doppel', Extest_doppel, METH_VARARGS }, { 'test', Extest_test, METH_VARARGS }, { NULL, NULL },};void initExtest(){ Py_InitModule('Extest', ExtestMethods);}

Python.h頭文件在大多數(shù)類Unix系統(tǒng)中會在/usr/local/include/python2.x或/usr/include/python2.x目錄中,系統(tǒng)一般都會知道文件安裝的路徑。

增加包裝函數(shù),所在模塊名為Extest,那么創(chuàng)建一個包裝函數(shù)叫Extest_fac(),在Python腳本中使用是先import Extest,然后調用Extest.fac(),當 Extest.fac()被調用時,包裝函數(shù) Extest_fac()會被調用,包裝函數(shù)接受一個 Python的整數(shù)參數(shù),把它轉為C的整數(shù),然后調用C的fac()函數(shù),得到一個整型的返回值,最后把這個返回值轉為Python的整型數(shù)做為整個函數(shù)調用的結果返回回去。其他兩個包裝函數(shù)Extest_doppel()和Extest_test()類似。

從Python到C的轉換用PyArg_Parse*系列函數(shù), int PyArg_ParseTuple():把Python傳過來的參數(shù)轉為C;int PyArg_ParseTupleAndKeywords()與PyArg_ParseTuple()作用相同,但是同時解析關鍵字參數(shù);它們 的用法跟C的sscanf函數(shù)很像,都接受一個字符串流,并根據(jù)一個指定的格式字符串進行解析,把結果放入到相應的指針所指的變量中去,它們的返回值為1表示解析成功,返回值為0表示失敗。 從C到Python的轉換函數(shù)是PyObject* Py_BuildValue():把C的數(shù)據(jù)轉為Python的一個對象或一組對象,然后返回之;Py_BuildValue的用法跟sprintf很像,把所有的參數(shù)按格式字符串所指定的格式轉換成一個Python的對象。

C與Python之間數(shù)據(jù)轉換的轉換代碼:

Python與C/C++的相互調用案例

為每個模塊增加一個型如PyMethodDef ModuleMethods[]的數(shù)組,以便于Python解釋器能夠導入并調用它們,每一個數(shù)組都包含了函數(shù)在Python中的名字,相應的包裝函數(shù)的名字以及一個METH_VARARGS常量,METH_VARARGS表示參數(shù)以tuple形式傳入。 若需要使用 PyArg_ParseTupleAndKeywords()函數(shù)來分析命名參數(shù)的話,還需要讓這個標志常量與METH_KEYWORDS常量進行邏輯與運算常量 。數(shù)組最后用兩個NULL來表示函數(shù)信息列表的結束。

所有工作的最后一部分就是模塊的初始化函數(shù),調用Py_InitModule()函數(shù),并把模塊名和ModuleMethods[]數(shù)組的名字傳遞進去,以便于解釋器能正確的調用模塊中的函數(shù)。

(3)編譯

為了讓新Python的擴展能被創(chuàng)建,需要把它們與Python庫放在一起編譯,distutils包被用來編譯、安裝和分發(fā)這些模塊、擴展和包。

創(chuàng)建一個setup.py 文件,編譯最主要的工作由setup()函數(shù)來完成:

#!/usr/bin/env python from distutils.core import setup, Extension MOD = ’Extest’setup(name=MOD, ext_modules=[Extension(MOD, sources=[’Extest2.c’])])

Extension()第一個參數(shù)是(完整的)擴展的名字,如果模塊是包的一部分的話,還要加上用’.’分隔的完整的包的名字。上述的擴展是獨立的,所以名字只要寫'Extest'就行;sources參數(shù)是所有源代碼的文件列表,只有一個文件Extest2.c。setup需要兩個參數(shù):一個名字參數(shù)表示要編譯哪個內容;另一個列表參數(shù)列出要編譯的對象,上述要編譯的是一個擴展,故把ext_modules參數(shù)的值設為擴展模塊的列表。

運行setup.py build命令就可以開始編譯我們的擴展了,提示部分信息:

creating build/lib.linux-x86_64-2.6gcc -pthread -shared build/temp.linux-x86_64-2.6/Extest2.o -L/usr/lib64 -lpython2.6 -o build/lib.linux-x86_64-2.6/Extest.so

(4)導入和測試

你的擴展會被創(chuàng)建在運行setup.py腳本所在目錄下的build/lib.*目錄中,可以切換到那個目錄中來測試模塊,或者也可以用命令把它安裝到Python中:python setup.py install,會提示相應信息。

測試模塊:

Python與C/C++的相互調用案例

(5)引用計數(shù)和線程安全

Python對象引用計數(shù)的宏:Py_INCREF(obj)增加對象obj的引用計數(shù),Py_DECREF(obj)減少對象obj的引用計數(shù)。Py_INCREF()和Py_DECREF()兩個函數(shù)也有一個先檢查對象是否為空的版本,分別為Py_XINCREF()和Py_XDECREF()。

編譯擴展的程序員必須要注意,代碼有可能會被運行在一個多線程的Python環(huán)境中。這些線程使用了兩個C宏Py_BEGIN_ALLOW_THREADS和Py_END_ALLOW_THREADS, 通過將代碼和線程隔離,保證了運行和非運行時的安全性,由這些宏包裹的代碼將會允許其他線程的運行。

三、C/C++調用Python

C++可以調用Python腳本,那么就可以寫一些Python的腳本接口供C++調用了,至少可以把Python當成文本形式的動態(tài)鏈接庫,

需要的時候還可以改一改,只要不改變接口。缺點是C++的程序一旦編譯好了,再改就沒那么方便了。

(1)Python腳本:pytest.py

#test functiondef add(a,b): print 'in python function add' print 'a = ' + str(a) print 'b = ' + str(b) print 'ret = ' + str(a+b) return def foo(a): print 'in python function foo' print 'a = ' + str(a) print 'ret = ' + str(a * a) return class guestlist: def __init__(self): print 'aaaa' def p(): print 'bbbbb' def __getitem__(self, id): return 'ccccc'def update(): guest = guestlist() print guest[’aa’] #update()

(2)C++代碼:

/**g++ -o callpy callpy.cpp -I/usr/include/python2.6 -L/usr/lib64/python2.6/config -lpython2.6**/#include <Python.h>int main(int argc, char** argv){ // 初始化Python //在使用Python系統(tǒng)前,必須使用Py_Initialize對其 //進行初始化。它會載入Python的內建模塊并添加系統(tǒng)路 //徑到模塊搜索路徑中。這個函數(shù)沒有返回值,檢查系統(tǒng) //是否初始化成功需要使用Py_IsInitialized。 Py_Initialize(); // 檢查初始化是否成功 if ( !Py_IsInitialized() ) { return -1; } // 添加當前路徑 //把輸入的字符串作為Python代碼直接運行,返回0 //表示成功,-1表示有錯。大多時候錯誤都是因為字符串 //中有語法錯誤。 PyRun_SimpleString('import sys'); PyRun_SimpleString('print ’---import sys---’'); PyRun_SimpleString('sys.path.append(’./’)'); PyObject *pName,*pModule,*pDict,*pFunc,*pArgs; // 載入名為pytest的腳本 pName = PyString_FromString('pytest'); pModule = PyImport_Import(pName); if ( !pModule ) { printf('can’t find pytest.py'); getchar(); return -1; } pDict = PyModule_GetDict(pModule); if ( !pDict ) { return -1; } // 找出函數(shù)名為add的函數(shù) printf('----------------------n'); pFunc = PyDict_GetItemString(pDict, 'add'); if ( !pFunc || !PyCallable_Check(pFunc) ) { printf('can’t find function [add]'); getchar(); return -1; } // 參數(shù)進棧 PyObject *pArgs; pArgs = PyTuple_New(2); // PyObject* Py_BuildValue(char *format, ...) // 把C++的變量轉換成一個Python對象。當需要從 // C++傳遞變量到Python時,就會使用這個函數(shù)。此函數(shù) // 有點類似C的printf,但格式不同。常用的格式有 // s 表示字符串, // i 表示整型變量, // f 表示浮點數(shù), // O 表示一個Python對象。 PyTuple_SetItem(pArgs, 0, Py_BuildValue('l',3)); PyTuple_SetItem(pArgs, 1, Py_BuildValue('l',4)); // 調用Python函數(shù) PyObject_CallObject(pFunc, pArgs); //下面這段是查找函數(shù)foo 并執(zhí)行foo printf('----------------------n'); pFunc = PyDict_GetItemString(pDict, 'foo'); if ( !pFunc || !PyCallable_Check(pFunc) ) { printf('can’t find function [foo]'); getchar(); return -1; } pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, Py_BuildValue('l',2)); PyObject_CallObject(pFunc, pArgs); printf('----------------------n'); pFunc = PyDict_GetItemString(pDict, 'update'); if ( !pFunc || !PyCallable_Check(pFunc) ) { printf('can’t find function [update]'); getchar(); return -1; } pArgs = PyTuple_New(0); PyTuple_SetItem(pArgs, 0, Py_BuildValue('')); PyObject_CallObject(pFunc, pArgs); Py_DECREF(pName); Py_DECREF(pArgs); Py_DECREF(pModule); // 關閉Python Py_Finalize(); return 0;}

(3)C++編譯成二進制可執(zhí)行文件:g++ -o callpy callpy.cpp -I/usr/include/python2.6 -L/usr/lib64/python2.6/config -lpython2.6,編譯選項需要手動指定Python的include路徑和鏈接接路徑(Python版本號根據(jù)具體情況而定)。

(4)運行結果:

Python與C/C++的相互調用案例

四、總結

(1)Python和C/C++的相互調用僅是測試代碼,具體的項目開發(fā)還得參考Python的API文檔。

(2)兩者交互,C++可為Python編寫擴展模塊,Python也可為C++提供腳本接口,更加方便于實際應用。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 99精品在线观看 | 国产精品视频久久久 | 久久久久久黄 | 日韩在线视频观看 | 亚洲欧美一区二区三区视频 | 日本免费一区二区三区 | 成人在线视频播放 | 久久九九精品视频 | 国产婷婷| 欧美极品在线 | 日韩av在线免费 | 日本一区二区视频 | 精品精品| 亚洲成av人片在线观看无码 | 成年人性视频 | 桃色五月 | 一区二区三区四区在线 | 欧美日韩一区二区中文字幕 | 天堂√在线观看一区二区 | 桃色视频在线播放 | 成人免费xxxxx在线视频软件 | 最新黄色网址在线播放 | 中文字幕精品一区久久久久 | 精品久久一二三区 | 亚洲精品视频一区二区三区 | 欧美淫视频 | 亚洲欧美电影 | 亚洲视频精品在线 | av成人免费在线观看 | a级在线观看 | 巴西性猛交xxxx免费看久久久 | 久久久精品电影 | 精品一区二区三区在线观看 | 91麻豆精品国产91久久久更新时间 | 日韩免费| 日夜夜精品视频 | 日本三级电影免费 | 国产区在线观看 | 狠狠躁夜夜躁人人爽天天天天97 | av片网站 | 久久这里只有精品免费 | 91精品国产色综合久久 | 国产欧美在线观看 | 日韩av免费在线观看 | 99国产精品| 国产噜噜噜噜噜久久久久久久久 | 91av导航| 国产精品2019 | 一级片手机免费看 | 欧美精品乱码久久久久久按摩 | 亚洲精彩视频 | 日本三级不卡 | 天天插天天操天天干 | 午夜网址 | 午夜网 | 国产精品久久久久久久久久三级 | 91在线成人 | 国产成人精品免费视频 | av网站在线免费观看 | 精品一区二区三区蜜桃 | 国产美女永久免费无遮挡 | 欧美一区二区精品 | 免费看一区二区三区 | 成a人片在线观看 | 日韩精品一区二区三区在线观看 | 欧美国产精品一区二区 | 国产第一亚洲 | 中文欧美日韩 | 完全免费av | 禁果av一区二区三区 | 色网站免费视频 | 成人三级网址 | 精品视频在线观看 | 日韩在线视频第一页 | 专干老肥女人88av | 亚洲综合第一页 | 亚洲精品三级 | 久久91 | 久久亚洲精品国产一区 | www.五月天婷婷 | 91亚洲视频在线观看 | 黄色免费av | 久久久久国产精品 | 成人一区二区三区久久精品嫩草 | 一区二区在线看 | 久久噜噜噜精品国产亚洲综合 | 亚洲伊人精品酒店 | 操操操小说 | 国产黄色av | 999国产一区二区三区四区 | 99免费在线观看视频 | 欧美日本亚洲 | 青青草免费在线视频 | 日韩在线视屏 | 欧美在线播放 | 日韩一二三四 | 久久网日本 | 国产女人高潮视频在线观看 | 亚洲一区二区三区爽爽爽爽爽 | 免费 视频 1级 | 国产精品一区一区三区 | 成人精品国产一区二区4080 | 亚洲一区二区三区蜜桃 | 成人高清视频在线观看 | 日本三级中国三级99人妇网站 | 欧美一级黄色片 | 免费av片网站 | 精品国产一区二区三区久久久蜜 | 精品国产精品 | 日韩看片 | 日韩精品视频在线 | 色婷网 | 久操不卡| 大香一网 | 最新亚洲黄色网址 | av在线免费观看网站 | 国产视频久久久久久 | 毛片免费看 | 国产依人在线 | 视频一区在线 | 久久久久久久成人 | 亚洲精品7777xxxx青睐 | 久久免费精品 | 日韩一区二区三区在线 | 精品国产一区二区三区在线观看 | 色婷婷亚洲一区二区三区 | 99re国产 | 国产精品一二三区 | 亚洲精品中文字幕在线观看 | 在线视频日韩 | 日韩综合在线 | 欧美日韩在线视频一区 | 欧美狠狠操 | 欧美日韩精品亚洲 | 91精品久久久久久久久久 | 亚洲国产精品18久久 | 久久无码精品一区二区三区 | 久久精品亚洲精品 | 久久精品久久久 | 午夜影剧院| 欧美午夜一区二区福利视频 | 小川阿佐美88av在线播放 | 色鲁97精品国产亚洲 | 91亚洲免费| 日韩av一区二区三区四区 | 成人午夜免费视频 | 午夜国产一区 | 婷婷视频在线 | 午夜精品网站 | 日韩成人不卡 | 欧美日韩中文字幕 | 精品一区二区三区在线视频 | 成人免费一区二区三区视频网站 | 成人特区 | 天天操天天拍 | 国产亚洲欧美一区二区 | 国产日韩一区二区 | 久久久精品综合 | 日韩欧美在线看 | 91.成人天堂一区 | 色婷婷在线播放 | 成人在线 | 亚洲男人天堂网 | 欧美一级电影免费观看 | 色橹橹欧美在线观看视频高清 | 免费视频一区二区 | 国产成人91| 凹凸日日摸日日碰夜夜爽孕妇 | 国产在线小视频 | 久久久精品久久久久 | 亚洲在线视频 | 日韩综合视频在线观看 | 日韩在线视频中文字幕 | 亚洲一区二区av | 国产在线小视频 | 国产精品黄网站在线观看 | 欧美日一区二区 | 91视频网址 | 久久久国色 | 国产精品美女久久久久久久久久久 | 久久综合九色综合欧美狠狠 | 国产成人精品亚洲日本在线观看 | 日韩1区 | 黄色一级大片视频 | 日韩av电影观看 | 一区二区在线看 | 日韩在线一区二区 | 日韩在线免费 | 亚洲欧洲av在线 | 久久黑人| 成人黄色电影小说 | 国产欧美精品 | 91色视频在线观看 | 美女久久久| 一区二区三区国产精品 | 久久av网址 | 天天干 夜夜操 | 一区小视频 | 欧美一区二区伦理片 | 在线国产一区 | 艳妇荡乳豪妇荡淫 | 欧美自拍视频在线 | 91精品久久久久久久久久小网站 | 精品国产欧美一区二区 | 亚色在线 | 亚洲一区二区三区中文字幕 | 日韩国产在线播放 | 亚洲av毛片一级二级在线 | 黄色国产区| 国产成人精品一区二区三区视频 | 日韩视频网 | 国产精品久久9 | 精品一区二区三区在线视频 | 日韩精品第一页 | 久久久av | 成人国产精品视频 | 无套内谢孕妇毛片免费看红桃影视 | 成人免费网站视频 | 日韩中文在线 | 美女黄网| 精品少妇一区二区三区日产乱码 | 91男女视频 | 日韩免费在线观看视频 | 欧美精品成人一区二区三区四区 | 久久综合一区二区三区 | 午夜精品久久久久久久星辰影院 | 黄色av网站免费 | 一级黄视频 | 久久久久久亚洲精品 | 精品久久久久久久久久久久 | 国产91黄色 | 亚洲一区av| 狠狠躁夜夜躁人人爽天天高潮 | 国产麻豆乱码精品一区二区三区 | 99精品国产高清一区二区麻豆 | 精品一区二区视频 | 国产日韩精品在线 | av手机在线电影 | 亚洲成人av在线播放 | 影音先锋久久 | 黄色一级毛片在线观看 | 九九只有精品 | 欧美中文在线观看 | 欧美在线播放 | 日本欧美久久久久免费播放网 | 亚洲一区在线视频 | 久久国产一区二区三区 | 免费观看黄色大片 | 黄网在线观看 | 高清国产午夜精品久久久久久 | 国产日韩欧美在线 | 一级a性色生活片久久毛片 夜夜视频 | 天堂影院一区二区 | 91亚洲福利 | 成人精品视频在线观看 | 中文字幕在线日韩 | 久久精品六| 亚洲精品久久久久久久久 | 精品免费国产一区二区三区四区 | 国产精品毛片久久久久久久 | 中文字幕av亚洲精品一部二部 | 亚洲精品乱码久久久久久花季 | 盗摄精品av一区二区三区 | 亚洲精品女优 | 国产精品成人国产乱一区 | 日日干天天操 | 日本jizz在线观看 | 色噜噜狠狠狠综合曰曰曰88av | 国产男女爽爽爽免费视频 | 国产一区二区三区久久久久久久久 | 国产一级黄片毛片 | 久久av网| 亚洲高清一区二区三区 | 少妇精品视频在线观看 | 免费一区二区 | 欧美一区二区三区视频 | 91免费看 | 毛片99 | 欧美 中文字幕 | h免费在线| 婷婷久久综合九色综合绿巨人 | www久久久 | 蜜臀91精品国产高清在线观看 | 精品久久久久久久久久久久久久久久久久 | 亚洲a精品| 亚洲激情视频在线观看 | av网站观看| 欧美日韩国产一区二区 | 欧美1级| 中文字幕第二页 | 视频在线一区二区三区 | 国产成人在线视频 | 超碰在线一区二区三区 | av伊人网| 日韩欧美国产成人一区二区 | 中文字幕在线资源 | 精品久久久久久国产 | 亚洲精品一区二区三区蜜桃久 | 日日草夜夜草 | 午夜影院在线 | 国产视频大全 | 亚洲一区二区免费在线观看 | 91精品国产综合久久久久久蜜臀 | 色偷偷888欧美精品久久久 | 成人在线播放网站 | 欧洲一区二区三区 | 婷婷久久综合九色综合绿巨人 | 国产高清在线精品一区二区三区 | 亚洲精品久久久久999中文字幕 | www.成人在线视频 | 精品欧美乱码久久久久久1区2区 | 依人成人综合网 | 亚洲成人免费 | 成人一区二区三区 | 丁香婷婷综合激情五月色 | 国产精品国产成人国产三级 | 久草在线观看福利视频 | 亚洲精品v | 日韩精品一区二区三区在线观看 | 99精品国自产在线 | 国产在线精品一区二区 | 国产精品毛片久久久久久久 | 欧美精品区 | 成人黄页在线观看 | 国内精品视频在线观看 | 在线99热 | av黄色在线免费观看 | 国产欧美日韩精品一区二区三区 | 亚洲这里只有精品 | 免费成人av| 国产精品久久久久无码av | 三级黄色在线视频 | 亚洲一区二区视频在线观看 | 四虎欧美 | 国产乱码精品一区二区三区忘忧草 | 成人久久久精品乱码一区二区三区 | 亚洲国产成人av | 色综合中文 | 91中文字幕在线观看 | 国产成人精品999在线观看 | 国产999免费视频 | 精品欧美一区二区三区久久久 | 久久免费黄色网址 | 视频一区二 | 国产欧美精品一区二区三区四区 | 蜜桃在线视频 | 亚洲综合一区二区 | www.成人久久 | 一区二区三区四区视频 | 国产综合精品 | 欧美狠狠操 | 日韩精品专区 | 91精品久久久久久9s密挑 | 亚洲国产精品18久久 | 成人一级黄色大片 | 男女啪啪免费网站 | 久久91 | 毛片日韩 | 狠狠久久伊人中文字幕 | 中文字幕在线播放不卡 | 自拍视频网 | 一级片免费在线 | 欧美在线 | 亚洲 | 免费观看一级毛片 | 91麻豆精品国产91久久久更新时间 | 欧美久久久久久久久久久久久久 | 性视频网站免费 | 日韩欧美一区二区三区视频 | 国产精品久久久久久久久福交 | 精品久久一二三区 | 91免费观看 | 免费看一区二区三区 | 一区二区三区回区在观看免费视频 | 精品亚洲一区二区 | 成人国产在线 | 国产综合av| 色婷网 | 日韩av免费 | 亚洲免费视频一区 | 毛片大全 | 一级免费视频 | 成人激情免费视频 | 国产成人精品一区二区三区网站观看 | 一区视频网站 | 成人一区二区在线 | 欧美精品一级二级 | 玖玖精品视频 | 国产成人精品一区二区三区四区 | 不用播放器的毛片 | 美国一级黄色片 | 亚洲成人精品 | 成人一区二区在线观看 | 国产精品久久久久久久久费观看 | 超碰成人在线免费 | 久久精品国产99精品国产亚洲性色 | 日韩成人免费av | av在线成人 | 成人深夜在线观看 | 亚洲精品视频在线播放 | 成人亚洲精品777777大片 | 人人爱超碰| 亚洲视频一区二区 | 成人亚洲 | 欧美国产一区二区 | 欧美啊v | 欧美亚洲综合久久 | 国产精成人 | 欧美一区二区在线视频 | 国产精品一二三区 | 韩日一区| 国产欧美日本 | 久草在线视频免费播放 | 午夜午夜精品一区二区三区文 | 日韩av一区在线 | 无套内谢孕妇毛片免费看红桃影视 | 先锋资源在线观看 | 中国毛片基地 | 中文字幕国产视频 | 久热九九 | 91精品国产日韩91久久久久久 | 欧美久久免费观看 | 欧美成年黄网站色视频 | 偷拍做爰吃奶视频免费看 | 欧美黄色一区 | 日韩一区二区三区在线视频 | 中文字幕一区二区三区免费视频 | 久久91| 久久久涩 | 成人日韩av | 91精品国产自产精品男人的天堂 | 久久久久国产精品一区二区 | 中文字幕国产一区 | 国产 日韩 一区 | 影视在线观看 | 一本一道久久久a久久久精品91 | 一级片观看 | 国产精品一区二区三区四区五区 | 欧美精品一区久久 | 一区二区在线播放视频 | 亚洲天堂中文字幕 | 天堂一区 | 91麻豆精品国产91久久久更新资源速度超快 | 日韩av免费在线观看 | 99re国产 | 作爱视频免费看 | 免费观看黄色大片 | 日韩免费在线观看视频 | 狠狠天天 | 日本黄a三级三级三级 | 黄色毛片免费看 | 91视频.com | 国产一级一级特黄女人精品毛片 | 欧美日韩在线观看视频 | 爱干视频| 午夜久久久久 | 久草在线 | 91精品久久久久久久久中文字幕 | 色综合国产 | 欧美二区在线 | 国产精品久久久久久吹潮 | 欧美日韩福利视频 | av大全在线 | 在线不卡视频 | 亚洲h网站| 久久视频在线 | 亚洲色图偷拍视频 | 欧美一级在线观看 | 久久久999精品视频 五月天婷婷在线视频 | 亚洲视频观看 | 久热免费在线观看 | 欧美亚洲在线 | 亚洲欧美激情在线 | 日日夜夜精品 | 午夜精品一区二区三区免费视频 | 国产一区二区三区免费在线观看 | 久久久久久免费精品 | 色综合国产 | 91精品国产高清一区二区三区 | 伊人春色网 | 国产高清视频一区 | 亚洲一区视频网站 | 欧美一级c片 | 深夜福利亚洲 | 亚洲精品在线免费播放 | 日韩视频―中文字幕 | 亚洲成人av在线播放 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 羞羞视频网站 | 国产精品一区二区在线看 | aaaaaa黄色片 | 日韩乱码中文字幕 | 性色在线 | 中文字幕一区在线观看视频 | 国产精品一区一区三区 | 日韩一区二区在线免费 | 国产精品久久久久一区二区三区共 | 越南性xxxx精品hd | 国产精品久久精品 | 日韩一二三区视频 | 成人国产在线 | 日韩有码一区 | 亚洲国产精品一区 | 国产精品一品二区三区的使用体验 | 韩日精品一区 | 粉嫩高清一区二区三区 | 一级黄色影视 | 狠狠操狠狠干 | 在线观看国产一区 | www久久久 | 日韩一区二区三区在线观看 | 黄片毛片一级 | 欧美日韩大片在线观看 | 欧美日韩国产高清 | 国产视频久久久久 | 午夜av电影院 | 免费黄色特级片 | 亚洲男人天堂网 | 美女二区| 九九色综合| 九九99热 | 欧美一级视频免费 | 日韩爱爱网 | 国产成人激情 | 国产精品久久久久久久久费观看 | 亚洲精品66 | 免费高潮视频95在线观看网站 | 日本三级中国三级99人妇网站 | 欧美久久久久 | 91久久久久久久久久久久久久 | 欧美高清视频一区 | 国产农村妇女精品 | 亚洲欧美一区二区三区在线 | 国产精品福利一区 | 久在线视频 | 亚洲高清视频在线观看 | 久久国产精品无码网站 | 日本免费在线视频 | 日韩在线观看中文字幕 | 男人天堂a | 久久久久无码国产精品一区 | 亚洲精品成人久久久 | 色在线免费视频 | 日韩在线观看一区 | 久久男人天堂 | 欧美日韩综合精品 | 黄色大片网站在线观看 | 91超碰在线播放 | 日本在线视频中文字幕 | 国产一级特黄aaa大片 | 青青久视频 | 特黄特黄aaaa级毛片免费看 | 美女久久久久久久久久久 | 美女逼网站 | 91大神xh98hx在线播放 | 欧美一级精品片在线看 | 久久久精品影院 | 成人午夜精品一区二区三区 | 香蕉大人久久国产成人av | 欧美日韩在线视频免费 | 国产精品久久久久久久午夜片 | 亚洲国产网站 | 欧美一级二级三级 | 91福利在线播放 | 人人九九| 伊人色播 | 91免费看电影 | www312aⅴ欧美在线看 | 欧美精品一区二区在线观看 | 亚洲精品福利 | www视频在线观看 | 国产欧美日韩综合精品一区二区 | 欧美日韩亚洲二区 | 狠狠色丁香婷婷综合 | av中文字幕第一页 | 日韩在线观看 | 日韩欧美二区 | 毛片网站在线观看 | 成年人免费看 | 国产亚洲欧美一区 | 国产91福利视频 | 黄色片在线 | 第一色网站 | 伊人网国产 | 日韩91 | 成年人视频在线观看免费 | 成人免费影院 | 二区在线视频 | 99久久婷婷国产综合精品 | 日韩精品一区二区三区在线播放 | 欧美高清dvd| 精品国产一区二区三区久久久蜜月 | 99精品欧美一区二区三区综合在线 | www.日韩在线观看 | 日韩视频在线观看视频 | 国产在线一二三区 | 成人在线视频网 | 99久久精品免费看国产四区 | 久久精品国产精品青草 | 久久夜色精品 | 中文字幕av在线 | 久久成人精品 | 欧美多人在线 | 最新日韩视频 | 国产精品免费一区二区三区四区 | 中文字幕三区 | 国产精品一区二区三区四区 | av中文字幕在线 | 欧美日韩综合视频 | 欧美国产在线观看 | 狠狠干网站 | 亚洲tv久久爽久久爽 | 在线一区二区三区 | 一区二区三区高清 | 久草最新 | 色婷婷一区二区三区四区 |