日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

[转]深入理解linux内核list_head

發(fā)布時間:2023/12/18 linux 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]深入理解linux内核list_head 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.chinaunix.net/uid-27122224-id-3277511.html
深入理解linux內(nèi)核list_head的實(shí)現(xiàn) 2012-07-17 17:37:01

分類: LINUX

前言:在linux源代碼中有個頭文件為list.h。很多l(xiāng)inux下的源代碼都會使用這個頭文件,它里面定義

了一個結(jié)構(gòu),以及定義了和其相關(guān)的一組函數(shù),這個結(jié)構(gòu)是這樣的:

點(diǎn)擊(此處)折疊或打開

1.struct list_head{

  • struct list_head *next, *prev;
  • 3.};

    那么這個頭文件又是有什么樣的作用呢,這篇文章就是用來解釋它的作用,雖然這是linux下的源代碼,但對

    于學(xué)習(xí)C語言的人來說,這是算法和平臺沒有什么關(guān)系。

    一、雙向鏈表

    學(xué)習(xí)計(jì)算機(jī)的人都會開一門課程《數(shù)據(jù)結(jié)構(gòu)》,里面都會有講解雙向鏈表的內(nèi)容。

    什么是雙向鏈表,它看起來是這樣的:

    點(diǎn)擊(此處)折疊或打開

    1.struct dlist

    2.{

  • int no;
  • void* data;
  • struct dlist *prev, *next;
  • 6.};
    他的圖形結(jié)構(gòu)圖:

    現(xiàn)在有幾個結(jié)構(gòu)體,它們是:

    表示人的:

    點(diǎn)擊(此處)折疊或打開

    1.struct person

    2.{

  • int age;
  • int weight;
  • 5.};

    表示動物的:

    點(diǎn)擊(此處)折疊或打開

    1.struct animal

    2.{

  • int age;
  • int weight;
  • 5.};

    如果有一組filename變量和filedata變量,把它們存起來,我們會怎么做,當(dāng)然就用數(shù)組了,但我們想使

    用雙向鏈表,讓它們鏈接起來,那該怎么做,唯一可以做的就是給每個結(jié)構(gòu)加如兩個成員,如下:

    表示人的:

    點(diǎn)擊(此處)折疊或打開

    1.struct person

    2.{

  • int age;
  • int weight;
  • struct person *next, *prev;
  • 6.};
    表示動物的:

    點(diǎn)擊(此處)折疊或打開

    1.struct animal

    2.{

  • int age;
  • int weight;
  • struct animal *next, *prev;
  • 6.};

    現(xiàn)在有一個人的一個鏈表的鏈頭指針person_head (循環(huán)雙向鏈表)和動物的鏈表的鏈頭指針

    ainimal_head ,我們要獲得特定年齡和特定體重的人或動物(假設(shè)不考慮重疊),那么代碼看起來可能是這樣:

    點(diǎn)擊(此處)折疊或打開

    1.struct person * get_percent(int age, int weight)

    2.{

    3.…....

  • struct person *p;
  • for(p = person_head->next; p != person_head; p=p->next)
  • {
  • if(p->age == age && p->weight == weight)
  • return p;
  • }
  • 10.…...

    11.}

    那同理,要獲得一個特定年齡和重量的動物的函數(shù)get_animal(int age, int weight)的代碼也是和上面

    的類似。

    我們再回過頭來看這兩個結(jié)構(gòu),它們的指向前和指向后的指針其實(shí)都差不多,那把它們綜合起來吧,所以看起

    來如下面:

    點(diǎn)擊(此處)折疊或打開

    1.struct list_head{

  • struct list_head *next, *prev;
  • 3.};
    表示人的:

    點(diǎn)擊(此處)折疊或打開

    1.struct person{

  • int age;
  • int weight;
  • struct list_head list;
  • 5.};
    動物的:

    點(diǎn)擊(此處)折疊或打開

    1.struct animal

    2.{

  • int age;
  • int weight;
  • struct list_head list;
  • 6.};

    可能又會有些人會問了,struct list_head都不是struct persion和struct animal類型,怎么可以

    做鏈表的指針呢?其實(shí),無論是什么樣的指針,它的大小都是一樣的,32位的系統(tǒng)中,指針的大小都是32位

    (即4個字節(jié)),只是不同類型的指針在解釋的時候不一樣而已,那么這個struct list_head又是怎么去

    做這些結(jié)構(gòu)的鏈表指針呢,那么就請看下一節(jié)吧:)。

    二、struct list_head結(jié)構(gòu)的操作

    首先,讓我們來看下和struct list_head有關(guān)的兩個宏,它們定義在list.h文件中。

    點(diǎn)擊(此處)折疊或打開

    1.#define LIST_HEAD_INIT(name) { &(name), &(name) }

    2.#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)

    3.#define INIT_LIST_HEAD(ptr) do { ?

  • (ptr)->next = (ptr); (ptr)->prev = (ptr); \
  • 5.} while (0)
    這兩個宏是用了定義雙向鏈表的頭節(jié)點(diǎn)的,定義一個雙向鏈表的頭節(jié)點(diǎn),我們可以這樣:

    點(diǎn)擊(此處)折疊或打開

    1.struct list_head head;

    2.LIST_HEAD_INIT(head);
    又或者直接這樣:

    點(diǎn)擊(此處)折疊或打開

    1.LIST_HEAD(head);

    這樣,我們就定義并初始化了一個頭節(jié)點(diǎn)。

    點(diǎn)擊(此處)折疊或打開

    1.#define LIST_HEAD_INIT(name) { &(name), &(name) }

    就是用head的地址初始化其兩個成員next和prev ,使其都指向自己。

    我們再看下和其相關(guān)的幾個函數(shù),這些函數(shù)都作為內(nèi)聯(lián)函數(shù)也都定義list.h中,這里要說明一下linux源碼

    的一個風(fēng)格,在下面的這些函數(shù)中以下劃線開始的函數(shù)是給內(nèi)部調(diào)用的函數(shù),而以符開始的函數(shù)就是對外使用

    的函數(shù),這些函數(shù)一般都是調(diào)用以下劃線開始的函數(shù),或是說是對下劃線開始的函數(shù)的封裝。

    2.1 增加節(jié)點(diǎn)的函數(shù)

    點(diǎn)擊(此處)折疊或打開

    1.static inline void __list_add();

    2.static inline void list_add();

    3.static inline void list_add_tail();
    其實(shí)看源代碼是最好的講解了,這里我再簡單的講一下。

    點(diǎn)擊(此處)折疊或打開

    1./**

    • __list_add - Insert a new entry between two known consecutive entries.
    • @new:
    • @prev:
    • @next:
    • This is only for internal list manipulation where we know the prev/next
    • entries
  • */
  • 10.static inline void __list_add(struct list_head * new,

  • struct list_head * prev, struct list_head * next)
  • 12.{

  • next->prev = new;
  • new->next = next;
  • new->prev = prev;
  • prev->next = new;
  • 17.}

    18.//這個函數(shù)在prev和next間插入一個節(jié)點(diǎn)new。

  • 20./**

    • list_add - add a new entry
    • @new: new entry to be added
    • @head: list head to add it after
    • Insert a new entry after the specified head.
    • This is good for implementing stacks.
  • */
  • 點(diǎn)擊(此處)折疊或打開

    1.static inline void list_add(struct list_head new, struct list_head head)

    2.{

  • __list_add(new, head, head->next);
  • 4.}

    5.//這個函數(shù)在head節(jié)點(diǎn)后面插入new節(jié)點(diǎn)。

  • 7./**

    • list_add_tail - add a new entry
    • @new: new entry to be added
    • @head: list head to add it before
    • Insert a new entry before the specified head.
    • This is useful for implementing queues.
  • */
  • 15.static inline void list_add_tail(struct list_head new, struct list_head head)

    16.{

  • __list_add(new, head->prev, head); 18.}
    這個函數(shù)和上面的那個函數(shù)相反,它在head節(jié)點(diǎn)的前面插入new節(jié)點(diǎn)。
  • 2.2 從鏈表中刪除節(jié)點(diǎn)的函數(shù)

    點(diǎn)擊(此處)折疊或打開

    1./**

    • __list_del -
    • @prev:
    • @next:
    • Delete a list entry by making the prev/next entries point to each other.
    • This is only for internal list manipulation where we know the prev/next
    • entries
  • */
  • 11.static inline void __list_del(struct list_head * prev,

  • struct list_head * next)
  • 13.{

  • next->prev = prev;
  • prev->next = next;
  • 16.}

  • 18./**

    • list_del - deletes entry from list.
    • @entry: the element to delete from the list.
      • Note: list_empty on entry does not return true after this, the entry is in
    • an undefined state.
  • */
  • 24.static inline void list_del(struct list_head *entry)

    25.{

  • __list_del(entry->prev, entry->next);
  • 27.}

  • 29./**

    • list_del_init - deletes entry from list and reinitialize it.
    • @entry: the element to delete from the list.
  • */
  • 33.static inline void list_del_init(struct list_head *entry)

    34.{

  • __list_del(entry->prev, entry->next);
  • INIT_LIST_HEAD(entry);
  • 37.}

    這里簡單說一下,list_del(struct list_head *entry)是從鏈表中刪除entry節(jié)點(diǎn)。

    list_del_init(struct list_head *entry) 不但從鏈表中刪除節(jié)點(diǎn),還把這個節(jié)點(diǎn)的向前向后指針都指

    向自己,即初始化。

    那么,我們怎么判斷這個鏈表是不是空的呢!上面我說了,這里的雙向鏈表都是有一個頭節(jié)點(diǎn),而我們上面看到,定義一個頭節(jié)點(diǎn)時我們就初始化了,即它的prev和next指針都指向自己。所以這個函數(shù)是這樣的。

    點(diǎn)擊(此處)折疊或打開

    1./**

    • list_empty - tests whether a list is empty
    • @head: the list to test.
  • */
  • 5.static inline int list_empty(struct list_head *head)

    6.{

  • return head->next == head;
  • 8.}

    講了這幾個函數(shù)后,這又到了關(guān)鍵了,下面講解的一個宏的定義就是對第一節(jié)中,我們所要說的為什么在一個

    結(jié)構(gòu)中加入struct list_head變量就把這個結(jié)構(gòu)變成了雙向鏈表呢,這其中的關(guān)鍵就是怎么通過這個

    struct list_head變量來獲取整個結(jié)構(gòu)的變量,下面這個宏就為你解開答案:

    點(diǎn)擊(此處)折疊或打開

    1./**

    • list_entry - get the struct for this entry
    • @ptr: the &struct list_head pointer.
    • @type: the type of the struct this is embedded in.
    • @member: the name of the list_struct within the struct.
  • */
  • 7.#define list_entry(ptr, type, member) ?

  • ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
  • 乍一看下,不知道這個宏在說什么,沒關(guān)系,我舉個例子來為你一一解答 :)

    首先,我們還是用上面的結(jié)構(gòu):

    點(diǎn)擊(此處)折疊或打開

    1.struct person

    2.{

  • int age;
  • int weight;
  • struct list_head list;
  • 6.};

    我們一看到這樣的結(jié)構(gòu)就應(yīng)該知道它定義了一個雙向鏈表,下面來看下。

    我們有一個指針:

    struct list_head *pos;

    現(xiàn)在有這個指針,我們怎么去獲得這個指針?biāo)诘慕Y(jié)構(gòu)的變量(即是struct person變量,其實(shí)是struct

    person指針)呢?看下面這樣使用:

    點(diǎn)擊(此處)折疊或打開

    1.struct person *one = list_entry(pos, struct person, list);
    不明白是吧,展開一下 list_entry結(jié)構(gòu)如下:

    點(diǎn)擊(此處)折疊或打開

    1.((struct person )((char )(pos) - (unsigned long)(&((struct person *)0)->list)))

    我慢慢的分解,首先分成兩部分(char )(pos)減去(unsigned long)(&((struct person )0)-

    list)然后轉(zhuǎn) 成(struct person *)類型的指針。

    (char )(pos):是將pos由struct list_head轉(zhuǎn) 成char* ,這個好理解。

    (unsigned long)(&((struct person )0)->list):先看最里面的(struct person )0),它是把0

    地址轉(zhuǎn) 成struct person指針,然后(struct person *)0)->list就是指向list變量,之后是

    &((struct person *)0)->list是取這個變量的地址,最后是(unsigned long)(&((struct person

    *)0)->list)把這個變量的地址值變成一個整形數(shù)!

    這么復(fù)雜啊,其實(shí)說白了,這個(unsigned long)(&((struct person *)0)->list)的意思就是取list

    變量在struct person結(jié)構(gòu)中的偏移量。

    用個圖形來說(unsigned long)(&((struct person *)0)->list,如下:

    而(unsigned long)(&((struct person *)0)->list就是獲取這個offset的值。

    ((char )(pos) - (unsigned long)(&((struct person )0)->list))

    就是將pos指針往前移動offset位置,即是本來pos是struct list_head類型,它即是list。即是把

    pos指針往struct person結(jié)構(gòu)的頭地址位置移動過去,如上圖的pos和虛箭頭。

    當(dāng)pos移到struct person結(jié)構(gòu)頭后就轉(zhuǎn) 成(struct person *)指針,這樣就可以得到struct person

    *變量了。

    所以我們再回到前面的句子

    點(diǎn)擊(此處)折疊或打開

    1.struct person *one = list_entry(pos, struct person, list);

    2.//就是由pos得到pos所在的結(jié)構(gòu)的指針,動物就可以這樣:

    3.struct animal *one = list_entry(pos, struct animal, list);
    下面我們再來看下和struct list_head相關(guān)的最后一個宏。
    2.3 list_head 的遍歷的宏

    點(diǎn)擊(此處)折疊或打開

    1./**

    • list_for_each - iterate over a list
    • @pos: the &struct list_head to use as a loop counter.
    • @head: the head for your list.
  • */
  • 6.#define list_for_each(pos, head) ?

  • for (pos = (head)->next; pos != (head); pos = pos->next)
  • 9./**

    • list_for_each_safe - iterate over a list safe against removal of list entry
    • @pos: the &struct list_head to use as a loop counter.
    • @n: another &struct list_head to use as temporary storage
    • @head: the head for your list.
  • */
  • 15.#define list_for_each_safe(pos, n, head) ?

  • for (pos = (head)->next, n = pos->next; pos != (head); \
  • pos = n, n = pos->next)
  • list_for_each(pos, head)是遍歷整個head鏈表中的每個元素,每個元素都用pos指向。

    list_for_each_safe(pos, n, head)是用于刪除鏈表head中的元素,不是上面有刪除鏈表元素的函數(shù)了

    嗎,為什么這里又要定義一個這樣的宏呢。看下這個宏后面有個safe字,就是說用這個宏來刪除是安全的,

    直接用前面的那些刪除函數(shù)是不安全的。這個怎么說呢,我們看下下面這個圖,有三個元素a ,b ,c。

    點(diǎn)擊(此處)折疊或打開

    1.list_for_each(pos, myhead)

    2.{

  • if (pos == b)
  • list_del_init(pos);
  • //break;
  • }
  • 。。。
  • 13.}
    上面的算法是不安全的,因?yàn)楫?dāng)我們刪除b后,如下圖這樣:

    上刪除pos即b后,list_for_each要移到下一個元素,還需要用pos來取得下一個元素,但pos的指向已

    經(jīng)改變,如果不直接退出而是在繼續(xù)操作的話,就會出錯了。

    而 list_for_each_safe就不一樣了,如果上面的代碼改成這樣:

    點(diǎn)擊(此處)折疊或打開

    1.struct list_head pos, n;

    2.list_for_each_safe(pos, n, myhead)

    3.{

  • if (pos == b)
  • list_del_init(pos);
  • //break;
  • }
  • 。。。
  • 14.}

    這里我們使用了n作為一個臨時的指針,當(dāng)pos被刪除后,還可以用n來獲得下一個元素的位置。

    說了那么多關(guān)于list_head的東西,下面應(yīng)該總結(jié)一下,總結(jié)一下第一節(jié)想要解決的問題.

    三、 總例

    我用一個程序來說明在struct person中增加了struct list_head變量后怎么來操作這樣的雙向鏈表。

    點(diǎn)擊(此處)折疊或打開

    1.#include <stdio.h>

    2.#include "list.h"

  • 4.struct person

    5.{

  • int age;
  • int weight;
  • struct list_head list;
  • 10.};

  • 12.int main(int argc, char* argv[])

    13.{

  • struct person *tmp;
  • struct list_head *pos, *n;
  • int age_i, weight_j;
  • // 定義并初始化一個鏈表頭
  • struct person person_head;
  • INIT_LIST_HEAD(&person_head.list);
  • for(age_i = 10, weight_j = 35; age_i < 40; age_i += 5, weight_j += 5)
  • {
  • tmp =(struct person*)malloc(sizeof(struct person));
  • tmp->age = age_i;
  • tmp->weight = weight_j;
  • // 把這個節(jié)點(diǎn)鏈接到鏈表后面
  • // 這里因?yàn)槊看蔚墓?jié)點(diǎn)都是加在person_head的后面,所以先加進(jìn)來的節(jié)點(diǎn)就在鏈表里的最
  • 30.后面

  • // 打印的時候看到的順序就是先加進(jìn)來的就在最后面打印
  • list_add(&(tmp->list), &(person_head.list));
  • }
  • // 下面把這個鏈表中各個節(jié)點(diǎn)的值打印出來
  • printf("\n");
  • printf("=========== print the list ===============\n");
  • list_for_each(pos, &person_head.list)
  • {
  • // 這里我們用list_entry來取得pos所在的結(jié)構(gòu)的指針
  • tmp = list_entry(pos, struct person, list);
  • printf("age:%d, weight: %d \n", tmp->age, tmp->weight);
  • }
  • printf("\n");
  • // 下面刪除一個節(jié)點(diǎn)中,age為20的節(jié)點(diǎn)
  • printf("========== print list after delete a node which age is 20
  • 50.==========\n");

  • list_for_each_safe(pos, n, &person_head.list)
  • {
  • tmp = list_entry(pos, struct person, list);
  • if(tmp->age == 20)
  • {
  • list_del_init(pos);
  • free(tmp);
  • }
  • }
  • list_for_each(pos, &person_head.list)
  • {
  • tmp = list_entry(pos, struct person, list);
  • printf("age:%d, weight: %d \n", tmp->age, tmp->weight);
  • }
  • // 釋放資源
  • list_for_each_safe(pos, n, &person_head.list)
  • {
  • tmp = list_entry(pos, struct person, list);
  • list_del_init(pos);
  • free(tmp);
  • }
  • return 0;
  • 78.}

    轉(zhuǎn)載于:https://www.cnblogs.com/fastwave2004/p/4940166.html

    總結(jié)

    以上是生活随笔為你收集整理的[转]深入理解linux内核list_head的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    中文字幕视频观看 | av国产在线观看 | 国产精品99免视看9 国产精品毛片一区视频 | 在线99 | 91视频久久久 | 亚洲精品18p | 成人一区在线观看 | 国产高清无av久久 | 亚洲精品国偷拍自产在线观看蜜桃 | 探花视频在线观看+在线播放 | 久久婷婷开心 | 国产精品久久久久久五月尺 | 91九色porny在线 | 亚洲黄色一级大片 | 国产精品久久99精品毛片三a | 九九三级毛片 | 2024av| 手机在线欧美 | 在线观看视频一区二区三区 | 欧美日韩免费看 | 免费网站看av片 | 日批网站在线观看 | 99久久激情视频 | 国产99爱 | 色婷婷久久久综合中文字幕 | 人人草人人做 | 免费视频91蜜桃 | 天天色天天操综合网 | 色婷婷在线视频 | 97品白浆高清久久久久久 | 最近中文字幕mv免费高清在线 | 国产免费成人 | www.天天干.com | 日韩精品一区二区三区第95 | 国产专区视频在线 | 又湿又紧又大又爽a视频国产 | 中文字幕综合在线 | 欧美黑人xxxx猛性大交 | 久草在线视频在线 | 国产偷在线| 精品亚洲视频在线观看 | 国产成人久久av免费高清密臂 | 久久美女免费视频 | 这里只有精品视频在线观看 | 亚洲综合一区二区精品导航 | 久久精品国产一区二区电影 | 久久99久久99精品中文字幕 | 亚洲视频免费在线观看 | 久久草网 | 久草在线91 | 91av在线视频免费观看 | 五月开心婷婷 | 狠狠操狠狠操 | 久久精品网站免费观看 | 精品福利视频在线观看 | 国产午夜精品理论片在线 | 911国产 | 男女拍拍免费视频 | 亚洲欧洲一级 | 久久久久久看片 | 欧美精品国产综合久久 | 91试看| 亚洲高清视频在线观看免费 | 国产福利一区二区在线 | 亚洲国产影院 | 天天干天天操天天搞 | 97av色| 国产精品嫩草69影院 | 国产中文字幕三区 | 五月综合| 亚洲成年人av | 天天射日 | 国产亚洲欧美精品久久久久久 | 国产一级片免费观看 | 亚洲最新在线视频 | 国产精品免费在线观看视频 | av一区二区三区在线观看 | 婷婷综合av | 97成人啪啪网 | 亚洲综合色播 | 亚洲 欧洲av | 在线免费高清一区二区三区 | 精品国产电影一区二区 | 99久久精品国产一区二区成人 | 亚洲一级二级 | 99r在线观看| 国产在线美女 | 日韩电影黄色 | 人人干人人添 | 国产一级电影网 | av中文字幕在线看 | a国产精品| 国产一区在线视频 | 曰韩在线 | 韩国av在线| 中文字幕在线观看资源 | 九九综合在线 | 91成人精品一区在线播放69 | 最新中文字幕 | 亚洲视频www | 97久久久免费福利网址 | 亚欧洲精品视频在线观看 | 四虎4hu永久免费 | 美女激情影院 | 337p日本欧洲亚洲大胆裸体艺术 | 色综合天天狠狠 | 麻豆系列在线观看 | 久久激情视频 久久 | 超碰97人人干 | 亚洲精品视频第一页 | 成人精品电影 | 亚洲国产日韩在线 | 视频一区在线免费观看 | 成人黄色小说视频 | 久久婷婷丁香 | 欧美日韩国产色综合一二三四 | 亚洲好视频 | 欧美精彩视频在线观看 | 国产精品毛片久久久久久久久久99999999 | 91视频中文字幕 | 日韩免费视频播放 | 久久蜜桃av | 欧美五月婷婷 | 超碰九九 | 亚洲高清资源 | 国产美腿白丝袜足在线av | 日韩av中文在线观看 | 91久久精品一区二区二区 | 日韩国产精品久久久久久亚洲 | 青草视频在线播放 | 一二区av | 亚洲一区 影院 | 激情影音 | 国产精品观看在线亚洲人成网 | a√国产免费a | 91在线麻豆 | 色综合婷婷 | 99久在线精品99re8热视频 | 五月天婷婷在线播放 | a久久久久久 | 天堂av中文字幕 | 亚洲精品视频在线观看免费视频 | 婷婷电影在线观看 | 91亚洲激情 | 午夜精品久久久久久久久久久久久久 | 国产精品破处视频 | 草免费视频 | 久久理论电影网 | 亚洲伊人天堂 | 亚洲免费精品视频 | 国产精品视频不卡 | 免费视频 你懂的 | 久久综合色天天久久综合图片 | 国产私拍在线 | 91久久精品日日躁夜夜躁国产 | 久久99国产精品 | 免费a级毛片在线看 | 日韩av在线高清 | 国内精品久久久 | 丁香在线视频 | 欧美做受高潮电影o | 中文十次啦| 中文在线a√在线 | www视频免费在线观看 | 久久久国产精品视频 | 国产视频在线免费观看 | www国产亚洲 | 日韩激情三级 | 人人爱在线视频 | 深夜福利视频在线观看 | 免费看成人a | 国产精品免费在线播放 | 99精品欧美一区二区蜜桃免费 | 手机看片国产日韩 | 一区二区三区在线看 | 久草影视在线观看 | 99热在线看 | 99这里只有| 免费精品视频在线观看 | 欧美一区在线看 | 黄色三级免费 | 九月婷婷人人澡人人添人人爽 | 欧美日韩亚洲一 | 国产99久久久欧美黑人 | 久操伊人 | www.99在线观看 | 婷婷天天色 | 亚洲精品在线观看的 | 久久久首页 | 日韩成人黄色 | 成年人在线免费看 | 精品一区二区三区香蕉蜜桃 | 啪啪精品 | 亚洲更新最快 | 国产中的精品av小宝探花 | 国产一区二区三区免费在线观看 | 国产69精品久久99的直播节目 | 国产精品第7页 | 97超碰免费在线观看 | 久久久久人人 | 日韩一区二区三免费高清在线观看 | 国产精品久久久久久久久久ktv | 久久久久看片 | 曰韩精品| 新av在线| 国产手机视频在线 | 美女网站色免费 | 中文在线www | 免费在线观看av网址 | 国产精品久久久av久久久 | 久久免费国产视频 | 欧美另类一二三四区 | 91高清免费观看 | 国产精品18久久久久白浆 | 欧美日韩国产在线 | av中文字幕免费在线观看 | 国产丝袜制服在线 | 超碰公开97| 涩av在线| 午夜色大片在线观看 | 久久精品高清视频 | www.91av在线 | 久草精品视频在线播放 | 正在播放国产精品 | 久草男人天堂 | 成人一级片在线观看 | 免费成人在线观看 | 久久久黄色 | 国产视频中文字幕 | 五月开心婷婷 | 91在线观看视频 | 超碰公开在线 | 国产美女网站在线观看 | 久久精品在线免费观看 | 久久极品| 超碰久热 | 国产麻豆视频 | 干狠狠 | 亚洲免费小视频 | 久久久久国产精品午夜一区 | 草久在线 | 久热免费在线观看 | 欧美激情xxxx| 二区视频在线观看 | 精品一区二区久久久久久久网站 | 国产成人亚洲精品自产在线 | 国产精品久久av | 91av视屏 | 日韩免费成人av | 在线观看成人小视频 | 国产高清永久免费 | 色婷婷88av视频一二三区 | 中文字幕高清有码 | 久久精品视 | 国产高清在线观看av | 日韩中文字幕视频在线观看 | 成年人电影免费看 | av网站手机在线观看 | 91入口在线观看 | 国产精品9999 | 国产一区在线看 | 美女视频是黄的免费观看 | 黄色官网在线观看 | 欧美一区二区日韩一区二区 | 久久理论电影 | 欧美99热 | 成人视屏免费看 | 美女精品国产 | 亚洲国产精品成人女人久久 | 色999精品| 天天操天天射天天添 | 日韩视频专区 | 91久久久久久久 | 超碰在线公开免费 | 国产视频一级 | 五月婷婷六月丁香激情 | 96国产精品视频 | 欧美a级免费视频 | 毛片一级免费一级 | jizz999| 一区二区三区免费在线观看 | 久久视频一区 | av在线网站免费观看 | 国产免费人成xvideos视频 | 美女黄久久 | 成人动图 | 婷婷四房综合激情五月 | 欧美日韩高清一区 | 欧美a级片网站 | 久久成人精品电影 | 久久免费高清 | 91黄色影视 | 久久亚洲精品国产亚洲老地址 | 久久久久久久毛片 | 色激情在线 | 国产高清一级 | 国产精品99久久久久久武松影视 | 香蕉视频在线观看免费 | 中文字幕中文字幕在线中文字幕三区 | 亚洲一区二区高潮无套美女 | 精品国产一区二区三区久久久蜜月 | 久久黄色片子 | 最近中文字幕高清字幕在线视频 | 99精品久久99久久久久 | 色噜噜色噜噜 | 午夜精品久久久久久久99 | 国产精品久久久久久久久久久杏吧 | 自拍超碰在线 | 欧美午夜精品久久久久久孕妇 | 西西www4444大胆视频 | 免费色视频 | 丁香久久婷婷 | 免费网址你懂的 | 蜜臀av免费一区二区三区 | 四虎成人精品在永久免费 | 久久激情五月丁香伊人 | www.黄色| www在线免费观看 | 国产视频资源在线观看 | 日韩高清免费无专码区 | 日韩精品在线免费观看 | www黄色| 久久久www| 亚洲网站在线看 | 日韩精品一区二区三区在线视频 | 久久电影中文字幕视频 | 亚洲欧美国内爽妇网 | 激情网色 | 丝袜制服天堂 | 色噜噜狠狠狠狠色综合 | 成人毛片100免费观看 | 最新中文字幕在线资源 | av在线播放国产 | 亚洲精品美女在线观看播放 | 亚洲欧洲日韩在线观看 | 久久1电影院 | 在线视频a | av天天澡天天爽天天av | 91精品久久久久久 | 国产精品免费在线 | 欧美激情精品久久久久久免费 | 天天干人人干 | 88av色| 狠狠躁天天躁 | 中文字幕第一页在线 | 99精品在线免费观看 | 久久综合成人网 | 热re99久久精品国产66热 | 国产日韩视频在线播放 | 亚洲国产小视频在线观看 | 中文字幕一区二区在线观看 | 69夜色精品国产69乱 | 久草香蕉在线 | 国产黄色精品 | 丁香婷婷激情 | 亚洲精选在线 | 日韩字幕在线 | 91视频这里只有精品 | 亚洲成人黄色 | 日韩爱爱网站 | 国内精品视频一区二区三区八戒 | 国产视频精选在线 | 久久一区二区三区超碰国产精品 | 日日噜噜噜噜夜夜爽亚洲精品 | 香蕉在线影院 | 日日干美女 | 91精品在线播放 | 日本婷婷色 | 久九视频| 国产在线永久 | 超碰人人99| 日本成人免费在线观看 | 国产精品免费久久久久 | 97国产精品亚洲精品 | 国产日韩欧美中文 | 国产真实精品久久二三区 | 日韩在线免费播放 | 日本中文字幕视频 | 国产精品国产自产拍高清av | 久久久国产影院 | 亚洲高清视频在线观看 | 韩国一区二区三区视频 | 免费三级黄色 | 91女神的呻吟细腰翘臀美女 | 久久不卡电影 | 亚洲综合色播 | 天堂中文在线播放 | 欧美日韩一区二区三区在线免费观看 | 日韩欧美在线观看一区二区 | 女人18毛片a级毛片一区二区 | 日韩免费视频播放 | 国产一级片不卡 | 91视频在线看 | 久草在线99 | 日韩av视屏在线观看 | 日p视频在线观看 | 黄色av网站在线观看免费 | 日韩高清免费无专码区 | 91精品久久久久久久91蜜桃 | 中文字幕在线观看91 | 婷久久 | 日日夜夜添 | 国产成人a v电影 | 久久精品五月 | 午夜av电影 | 最近中文字幕大全中文字幕免费 | 免费视频久久久久 | 探花视频免费观看 | 成人av在线看 | 色婷婷激情电影 | 国产精品视频你懂的 | 经典三级一区 | 亚洲天堂网在线播放 | 香蕉免费 | 久久久国产成人 | 91亚洲国产成人 | 亚洲综合在| av电影亚洲 | 91精品国产福利在线观看 | 欧美伦理电影一区二区 | www.99久久.com | 综合精品在线 | 99久久婷婷 | 国产精品视频免费在线观看 | 九九热免费在线观看 | 色就色,综合激情 | 国产精品久久电影网 | 一区在线观看 | 97免费在线视频 | 午夜精品久久久99热福利 | 97超碰在线资源 | 免费在线成人 | 亚洲手机天堂 | 涩av在线 | 国产黄色片免费观看 | 丁香六月婷婷开心婷婷网 | 久草免费电影 | 伊人天堂av | 手机在线小视频 | 日韩免费观看高清 | 日韩欧美大片免费观看 | 国产精品99久久久久久人免费 | 中文字幕国产一区二区 | 中文字幕一区三区 | 九九99视频 | 成人毛片一区二区三区 | 国产成人久久精品亚洲 | 99久热在线精品视频成人一区 | 亚洲成av人片一区二区梦乃 | 成人黄色在线 | 国产一级视频在线免费观看 | 99久久婷婷国产综合精品 | 狠狠躁日日躁狂躁夜夜躁av | 日韩高清在线一区二区三区 | 99精品免费久久久久久久久日本 | 97香蕉超级碰碰久久免费软件 | 婷婷激情网站 | 天天摸天天舔天天操 | 成人网在线免费视频 | 亚洲 成人 欧美 | 中文字幕在线观看亚洲 | 青青河边草免费观看 | 麻豆成人精品视频 | 丁香电影小说免费视频观看 | 国产精品麻豆果冻传媒在线播放 | 成人av电影在线 | 黄色av观看 | 中文字幕免费一区二区 | 深爱激情综合网 | 在线看v片 | 亚洲天堂网视频 | 免费成人在线观看 | 亚洲欧美日韩在线一区二区 | 欧美性网站 | 夜夜骑日日操 | 亚洲午夜av| 国产精品视频不卡 | 国产999精品 | 精品国产一区二区三区久久影院 | 欧美日韩三级在线观看 | 久久综合亚洲鲁鲁五月久久 | 99视频网站 | 西西444www大胆高清图片 | 国产高清无线码2021 | 国产精品日韩久久久久 | 日韩视频在线观看免费 | 亚洲五月婷婷 | 国产成人黄色网址 | 久久国产视屏 | av福利在线 | 国产三级视频在线 | 久久精品国产99国产 | 国产精品久久久久久爽爽爽 | 亚洲精品乱码久久久久久写真 | a v在线视频 | 欧美伦理电影一区二区 | 夜夜躁日日躁狠狠躁 | 久久在现视频 | 国产黄色资源 | 久久在线免费视频 | 久久人人爽人人爽人人片av免费 | 欧美激情综合五月色丁香小说 | 国产一级二级av | www.伊人网 | 亚洲欧美在线综合 | 人人澡人人澡人人 | 蜜臀av性久久久久av蜜臀三区 | 888av| 日韩精品免费一区二区 | 欧美一区二区在线看 | 91麻豆精品国产 | 久久人人爽人人爽人人片 | 色香蕉在线视频 | 亚洲精品成人av在线 | 在线播放 日韩专区 | 欧美精品一区二区三区一线天视频 | 在线91精品 | 亚洲免费在线视频 | 久久综合九色综合97_ 久久久 | 欧美一区,二区 | 免费观看国产视频 | 欧美日韩视频在线观看一区二区 | 国产一级片免费视频 | 日韩av视屏在线观看 | 超碰国产在线观看 | 在线 视频 一区二区 | 国产在线2020 | 欧美a免费 | 国产视频日韩视频欧美视频 | 在线免费观看黄色大片 | 波多野结衣久久精品 | 亚洲 中文字幕av | 在线观看免费一区 | av不卡免费看 | 亚洲精品在线国产 | 国产又粗又硬又长又爽的视频 | 一区二区三区四区在线免费观看 | 91在线视频观看免费 | 成人在线观看免费视频 | 香蕉视频在线免费 | 国产一区欧美在线 | 亚洲国产精品久久久久 | 99国内精品久久久久久久 | 欧美日韩国产欧美 | 在线观看中文字幕亚洲 | 丁香五月亚洲综合在线 | 中文字幕乱码一区二区 | 日韩av在线免费看 | 男女精品久久 | av线上看| 欧美巨乳网| 国产一级片视频 | 日韩在线视频免费播放 | 久久久久久久久久久成人 | 国产视频精品久久 | 国产精品麻豆免费版 | 97超碰色 | 国产精品网红直播 | 国产成人精品久 | 成人国产精品av | 狠狠色噜噜狠狠狠狠2021天天 | 日韩精品中字 | 日本黄色免费在线观看 | 亚洲精品午夜久久久 | www.午夜视频 | 91九色网站| 日韩在线短视频 | 日韩 在线a | 综合精品在线 | 99精品国产在热久久 | 蜜桃视频在线视频 | 久草久| 婷婷综合在线 | 97在线免费视频观看 | 国产黄在线 | 成人在线观看资源 | 欧美a级片网站 | av免费在线网站 | 黄色网址国产 | 久久精品免视看 | 婷婷午夜激情 | 在线 你懂 | 亚洲一区网站 | 狠狠色2019综合网 | 午夜免费福利视频 | 色婷婷av一区 | 超碰97成人| 欧美成人基地 | 成人毛片一区二区三区 | 欧美性超爽 | 日韩久久久久久久久久久久 | 美女久久久久久 | 色999精品| 99久久久| 九九精品久久 | 99久久一区 | 亚洲欧美色婷婷 | www.夜夜爱 | www视频在线播放 | 久草在线费播放视频 | 国产婷婷色| 精品免费观看 | 午夜av免费 | 国产在线高清 | 久久精精品视频 | 亚洲精品合集 | 丝袜少妇在线 | 一区二区精品视频 | 色播99 | 综合色伊人 | 国产精品久久久久久麻豆一区 | 一级黄色视屏 | 久久尤物电影视频在线观看 | 国产中文视频 | 99热最新地址 | 午夜的福利 | 久久一级电影 | 免费看色网站 | 久久精品视频日本 | 久久精品一区 | 欧美一级高清片 | 伊人久在线 | 国产成人av网址 | 在线岛国av | 免费在线激情电影 | 中文成人字幕 | 96精品视频 | 97视频免费在线 | 在线观看日本高清mv视频 | 午夜在线资源 | 九九99靖品 | 久久国产精品视频观看 | 国产精品入口麻豆 | 日本中文字幕网站 | 日本成人免费在线观看 | 中文免费在线观看 | 免费精品在线视频 | 三级黄色网络 | 天天人人综合 | 亚洲国产视频网站 | 国产福利久久 | 日韩欧美网址 | 中文字幕制服丝袜av久久 | 久久久久久在线观看 | 中文字幕在线看 | 免费在线一区二区 | 欧美坐爱视频 | 婷婷婷国产在线视频 | 日韩伦理一区二区三区av在线 | 国产精品久久久久久久久久白浆 | 三级av免费观看 | 99精品电影 | 五月婷婷六月丁香 | 欧美精品一区二区在线观看 | 国产成人三级在线 | 国产精品久久久久影院日本 | 91香蕉视频黄 | 日韩欧美国产精品 | 亚州性色 | 91亚洲在线观看 | 欧美精品首页 | 成人a视频在线观看 | 久久久久久国产精品美女 | 色多多在线观看 | 国产99re| 日本精品视频在线观看 | 亚洲精品久久久久久久蜜桃 | www.亚洲精品在线 | 国产午夜精品福利视频 | 中文字幕麻豆 | 国产一区视频免费在线观看 | 午夜色性片| 一区二区欧美在线观看 | 亚洲成人动漫在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 丁香久久婷婷 | 日本久久精品视频 | 青青久视频| 91av亚洲| 91麻豆福利 | 久久免费视频8 | 91最新网址在线观看 | 亚洲 欧洲 国产 精品 | 在线电影av | 国产亚洲精品bv在线观看 | 高清视频一区二区三区 | 免费色视频 | 久久久久免费精品国产 | 国产亚洲欧美精品久久久久久 | 日本三级香港三级人妇99 | 奇米影视8888 | 日日干天天干 | 特级免费毛片 | 黄色片免费在线 | 日韩理论片在线观看 | 国产人成免费视频 | 国产伦精品一区二区三区在线 | 久久手机免费观看 | 亚洲中字幕 | 日韩av一卡二卡三卡 | 欧美精品乱码99久久影院 | 婷婷亚洲最大 | 九九热只有精品 | 97超碰人 | 久久影院中文字幕 | 亚洲最新av在线网站 | 欧美日韩高清一区二区 国产亚洲免费看 | 婷婷激情五月 | 日韩精品一区二区三区免费观看 | 日韩免费二区 | 精品在线观看视频 | 狠狠色丁香婷综合久久 | a爱爱视频 | 69久久夜色精品国产69 | 亚洲国产成人在线播放 | 婷婷国产在线观看 | 91天堂影院| 久草在线在线视频 | 久久成人高清视频 | 日韩视频在线不卡 | 精品亚洲成a人在线观看 | 久久99亚洲热视 | 日韩精品五月天 | 亚洲精品国精品久久99热 | 国色综合 | 美女网站色免费 | 日韩视频在线播放 | 99在线热播 | 最近日本mv字幕免费观看 | 国产日本三级 | 97香蕉久久超级碰碰高清版 | 精品久久1| 国产高清免费av | 天天干天天操天天拍 | 日韩精品一区在线观看 | 91.麻豆视频 | 粉嫩av一区二区三区免费 | 美女精品网站 | 黄色三级在线看 | 午夜免费在线观看 | 99热这里只有精品久久 | 日韩美av在线 | av综合站 | 国产原创在线 | 久久精品一区二区国产 | 亚洲精品视频在线观看免费视频 | 五月婷婷黄色 | 欧美日韩在线观看一区二区 | 日韩精品中文字幕久久臀 | 激情av一区二区 | 二区三区精品 | 欧美午夜久久久 | 黄在线免费看 | 久久久亚洲麻豆日韩精品一区三区 | 综合网伊人 | 午夜久久久久久久 | 久久激情综合 | 在线观看视频一区二区三区 | 婷婷久操 | 亚洲狠狠丁香婷婷综合久久久 | 国产精品在线看 | 欧美最猛性xxxxx亚洲精品 | 亚洲无吗av | 国产一级免费视频 | 国产精品资源在线观看 | 97色婷婷成人综合在线观看 | 黄色免费大片 | 91精品国产一区二区三区 | 玖玖玖在线观看 | 狠狠躁夜夜躁人人爽视频 | 激情丁香综合五月 | 国产一二区免费视频 | 黄色av成人在线 | 国产精品18毛片一区二区 | 日韩精品一卡 | 欧美性生活小视频 | 国产情侣一区 | 国产伦精品一区二区三区照片91 | 色综合久久久久综合99 | 国产精品久久久久久99 | 久久天天躁狠狠躁亚洲综合公司 | 天天操天天爱天天干 | 99国产一区| 免费av网址在线观看 | 在线免费观看的av网站 | 91精品毛片| 日韩精品一区二区在线观看 | 久久国产电影 | 91视频免费看片 | 黄色精品网站 | 久久精品欧美 | 久久精品免视看 | 亚洲一二三在线 | 中文字幕在线有码 | 久久综合影院 | 黄色片毛片 | 色99视频| av怡红院| 久久久久久久久久久国产精品 | 国产色啪| 中文字幕影片免费在线观看 | 欧美日韩视频一区二区 | 欧美色伊人 | www.香蕉视频在线观看 | 中文字幕免费一区二区 | 永久免费在线 | 日韩欧美一区二区在线观看 | 麻豆传媒视频在线免费观看 | 国产精品手机播放 | 精品亚洲欧美无人区乱码 | 一级久久精品 | 国产黄色片免费看 | 最近日本中文字幕 | 成人国产综合 | 最近2019年日本中文免费字幕 | av在线在线 | 久久久99精品免费观看app | 波多野结衣视频在线 | 免费h精品视频在线播放 | 免费在线成人av电影 | 亚洲永久免费av | 日韩在线第一区 | 天天·日日日干 | 99性视频 | 欧美午夜理伦三级在线观看 | 欧美一二区视频 | 久久精品99久久久久久2456 | 二区视频在线 | 国产99中文字幕 | 中文字幕一区二区三区精华液 | 日本成人免费在线观看 | 日韩免费二区 | 日本性高潮视频 | 国产精品久久久久久久久久三级 | 亚洲成人免费观看 | 久久噜噜少妇网站 | 久久国产精品久久w女人spa | 天天射天天射天天 | 精品国内 | 天天干天天拍天天操天天拍 | 视色网站| 精品国产一区二区三区四区vr | 91最新视频在线观看 | 日韩精品免费一区二区三区 | 亚洲乱亚洲乱妇 | 最新日韩在线观看视频 | 国产99久久久国产精品免费二区 | 狠狠色伊人亚洲综合网站野外 | 国产精品福利在线播放 | 亚洲综合成人在线 | 精品国产电影一区 | 天堂黄色片 | 99热这里只有精品免费 | 在线视频黄 | 亚洲精品视频免费在线观看 | 色婷婷伊人 | 欧美 日韩 性 | 亚洲精品短视频 | 精品一区二区视频 | 日本中文字幕在线观看 | 免费中文字幕视频 | 日本精品久久久久中文字幕5 | 狠狠色噜噜狠狠狠 | 在线免费中文字幕 | 91精品国产92久久久久 | 亚洲精品久久久蜜桃 | 天天摸日日操 | www.久久com | av电影免费看 | 欧美精品一区二区三区一线天视频 | 久久国产精品二国产精品中国洋人 | 精品在线观看一区二区三区 | 成人黄色在线观看视频 | 日本高清免费中文字幕 | 国产一级免费av | 国产黄色精品网站 | 免费69视频 | 亚洲综合精品在线 | 久久综合狠狠综合久久综合88 | 欧美午夜理伦三级在线观看 | 欧美成人性网 | 999久久a精品合区久久久 | 欧美特一级片 | 日韩大片免费观看 | 久草精品视频 | 久久久久久高潮国产精品视 | 国产成人精品一区二区三区网站观看 | 日本一区二区三区视频在线播放 | 久久国产精品一区二区三区四区 | www.69xx| 日韩成人xxxx | 免费看一级特黄a大片 | 久久成人毛片 | 国产91全国探花系列在线播放 | 波多野结衣视频一区二区 | 免费视频97 | 久久精品免费电影 | 粉嫩av一区二区三区入口 | 日韩av影视 | 蜜臀精品久久久久久蜜臀 | 国产精品久久久久久久久久尿 | 曰韩在线 | 国产专区第一页 | 国产在线精品二区 | 中国一级片在线 | 97色婷婷 | 久久99中文字幕 | 欧美日韩亚洲精品在线 | 在线观看视频国产 | 国产青春久久久国产毛片 | 欧美在线观看禁18 | 免费视频一二三 | 欧美亚洲成人xxx | 91成人精品一区在线播放 | 麻豆小视频在线观看 | 在线成人av | 欧美一进一出抽搐大尺度视频 | 永久免费看av | 国产亚洲成av片在线观看 | 成人一级电影在线观看 | 免费在线观看国产精品 | 97免费公开视频 | 精品一二三四在线 | 蜜臀av夜夜澡人人爽人人桃色 | 精品麻豆入口免费 | 黄色免费大片 | 青青河边草免费直播 | 国产自产高清不卡 | 人人爽人人爽人人爽学生一级 | 久草精品视频在线观看 | 国产成人一区在线 | 国产精品日韩 | 天天五月天色 | 亚洲动漫在线观看 | 国产精品18久久久久久vr | 亚洲影院国产 | 在线成人国产 | 日韩在线观看视频网站 | 日韩免费观看一区二区三区 | 久久精品一区八戒影视 | 久久精品波多野结衣 | 成年人免费在线看 | 国产一级片视频 | 国产亚洲欧美精品久久久久久 | 日本99精品 | 青青五月天 | 97视频免费看 | 亚洲涩涩网站 | 久久久久免费视频 | 精品国产理论 | 久久国产一区二区 | 国产一卡二卡在线 | 日日日日| 99热这里有 | 精品国产乱码久久久久久浪潮 | 草久视频在线观看 | 日韩精品2区 | 国产尤物视频在线 | 日韩免费视频观看 | 亚洲欧美日韩中文在线 | 免费看国产a | 亚洲欧美日韩在线看 | 人人爽人人看 | 国产精品18videosex性欧美 | 久久成人高清 | 国产成人综合图片 | 国产精品毛片久久 | 亚洲免费国产视频 | 国产精品免费观看视频 | 国产一区视频在线 | 黄色片视频免费 | 九九导航 | 国产视频导航 | 国产一区在线不卡 | 99视频久久| 日韩精品免费在线观看视频 | 99免费看片| 99精品在线| 色资源中文字幕 | 缴情综合网五月天 | 高清国产午夜精品久久久久久 | 国产精品18久久久 | 91少妇精拍在线播放 | a天堂一码二码专区 | 黄网站色视频免费观看 | 丁香婷婷自拍 | 中文字幕av日韩 | 国产成人a亚洲精品v | 国产视频久久久久 | 欧美视频国产视频 | 欧美在线视频日韩 | av中文天堂 | 国产免费观看久久 | 日本色小说视频 | 国产视频欧美视频 | 成年人在线免费看视频 | 丝袜+亚洲+另类+欧美+变态 | 亚洲区另类春色综合小说校园片 |