精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

并行Shell腳本驗證Linux的互斥信號量

系統 Linux
下面就帶大家學習下互斥信號量相關的函數,然后用代碼將這些函數串聯起來,并用并行腳本進行一下驗證。

[[380369]]

1 Linux下的互斥信號量的使用

1)Linux下互斥信號量的作用

互斥信號量主要是用于訪問共享資源時保證操作的原子性,即為一個整體的動作不允許被打斷。

2)Linux下的文件操作函數的學習方式

man命令學習函數使用,寫一個小代碼,將函數用起來。

下面就帶大家學習下互斥信號量相關的函數,然后用代碼將這些函數串聯起來,并用并行腳本進行一下驗證。

2 Linux下互斥信號量相關的函數

1)ftok函數

ftok函數用于構造鍵值。

① 函數原型。

  1. key_t ftok( char * fname, int id ) 

② 頭文件。

  1. include <sys/types.h>   
  2.  
  3. include <sys/ipc.h>  

③ 參數。

fname:文件名在內核中的一種數字表示。

id:項目id號。

鍵值有fname和項目id號組合產生。

④ 返回值。

成功:返回產生的鍵值。

失敗:-1。

2)semget函數

semget函數用于創建打開信號量。

① 函數原型。

  1. int semget(key_t key,int nsems,int semflg) 

獲取信號量集合的標示符。

當key所指定的信號量不存在的時候,并且semflg里包含了IPC_CREAT,這個時候,就會創建一個信號量集。

② 頭文件。

  1. include <sys/types.h>   
  2.  
  3. include <sys/ipc.h>  
  4.  
  5. include <sys/sem.h>  

③ 參數。

key:鍵值。

semflay:標志,可以去IPC_CREAT,對應鍵值的信號量如果不存在還可以創建信號量。

nsems:創建的這個信號量集合里面包含的信號量數目。

④ 返回值。

成功:返回信號量集合的標示符。

失?。?1。

3)semctl函數

semctl函數在一個信號量集或集合中的單個信號量上執行各種控制操作。

① 函數原型。

  1. int semctl(int semid, int semnum, int cmd,.../* union semun arg*/) 

② 頭文件。

  1. include <sys/types.h>   
  2.  
  3. include <sys/ipc.h>  

③ 參數。

semid:要控制的信號量集合的標示符。

semnum:用于標識集合中的具體信號量。

cmd:指定了需執行的操作。

信號量參數枚舉如下:

  1. union semun { 
  2.  
  3.      int   val;                 // SETVAL的值 
  4.      struct semid_ds *buf;      // IPC_STAT, IPC_SET的緩沖 
  5.      unsigned short  *array;    // GETALL, SETALL的數值 
  6.      struct seminfo  *__buf;    // IPC_INFO的緩沖 
  7.  
  8. }; 

信號量集合結構體如下:

  1. struct semid_ds { 
  2.  
  3.     struct ipc_perm sem_perm;   // 權限  
  4.     time_t          sem_otime;  // 上次semop的時間 
  5.     time_t          sem_ctime;  // 上次修改的時間 
  6.     unsigned long   sem_nsems;  // 信號量集中信號量個數 
  7. }; 

參數說明如下。

<1 常規控制操作.

加入下面參數進行操作都會忽略semnum參數。

IPC_RMID:立即刪除信號量集及其關聯的semid_ds數據結構。

IPC_STAT:在arg.buf指向的緩沖器中放置一份與這個信號量集相關聯的semid_ds數據結構的副本。

IPC SET:使用arg.buf指向的緩沖器中的值來更新與這個信號量集相關聯的semid_ds數據結構中選中的字段。

<2 獲取和初始化信號量值。

下面的操作可以獲取或初始化一個集合中的單個或所有信號量的值。獲取一個信號量的值需具備在信號量上的讀權限,而初始化該值則需要寫權限。

GETVAL:semctl返回由semid指定的信號量集中第semmum個信號量的值。這個操作無需arg參數。

SETVAL:將由semid指定的信號量集中第semnum個信號量的值初始化arg.val。

GETALL:獲取由semid指向的信號量集中所有信號量的值并將它們放arg.array指向的數組中。

SETALL:使用arg.array指向的數組中的值初始化semid指向的集合中的所有信號量。這個操作將忽略semnum參數。

注意GETVAL和GETALL返回的信息在調用進程使用它們時可能已經過期了。

<3 獲取單個信號量的信息。

下面的操作返回semid引用的集合中第semnum個信號量的信息。所有這些操作都需要在信號量集合中具備讀權限,并且無需arg參數。

GETPID:返回上一個在該信號量上執行semopO的進程的進程ID,這個值被稱為sempid值。如果還沒有進程在該信號量上執行過semopO,那么就返回0。

GETNCNT:返回當前等待該信號量的值增長的進程數,這個值被稱為semncnt值。

GETZCNT:返回當前等待該信號量的值變成0的進程數;這個值被稱為semzcnt值。

與上面介紹的GETVAL和GETALL操作一樣,GETPID、GETNCNT以及GETZCNT操作返回的信息在調用進程使用它們時可能已經過期了。

④ 返回值。

成功:semctl返回的值取決于cmd,如下。

GETVAL:semval的值。

GETPID:sempid的值。

GETNCNT:semncnt的值。

GETZCNT:semzcnt的值。

其他參數:返回0。

否則,semctl返回-1,并設置errno以指示錯誤。

4)semop函數

semop函數用于操作信號量集合中的信號量。

① 函數原型。

  1. int semop(int semid, struct sembuf *sops, unsigned nsops) 

② 頭文件。

  1. include <sys/types.h>   
  2.  
  3. include <sys/ipc.h>  
  4.  
  5. include <sys/sem.h>  

③ 參數。

semid:要操作的信號量集合的標示符。

nsops:要操作多少個信號量。

sops:對信號量執行什么樣的操作,執行什么操作由struct sembuf這一結構中量決定。

  1. struct sembuf{ 
  2.  
  3.       unsigned short sem_num;      // 信號量的數量 
  4.       short sem_op;                // 要執行的操作 
  5.       short semf1g;                // 操作標志(IPC_NOMAIT和SEM_UNDO) 

當sem_op > 0時,將信號量的值加上sem_op的值。

其結果是:其他等待減小信號量值的進程可能會被喚醒并執行它們的操作。(需要寫權限)

當sem_op < 0時,將信號量的值減去sem_op的值。

如果信號量的當前值大于或等于sem_op的絕對值,那么操作會立即結束。否則semop會阻塞直到信號量值增長到在執行操作之后不會導致出現負值的情況為止。(需要寫權限)

當sem_op = 0時,就對信號量值進行檢查以確定它當前是否等于0。如果等于0,那么操作將立即結束,否則semop就會阻塞直到信號量值變成0為止。(需要讀權限)

④ 返回值。

成功:0。

失?。?1。

3 實例代碼

下面用一個小程序用一下上面介紹的幾個函數。

1)程序原理

首先,通過并行腳本同時運行程序,在不加入互斥信號量的時候,不應該被分開的程序會被打斷(插入)。

接著,加入互斥信號量,此時并行程序每個程序都不會被另一個程序打斷(插入)。

2)未加入信號量的情況

下面的頭文件有些是不必要的,加入信號量需要全部的這些,為了省事,就不去了。

① unsem1.c。

  1. #include <unistd.h> 
  2. #include <sys/types.h> 
  3. #include <sys/stat.h> 
  4. #include <fcntl.h> 
  5. #include <stdio.h> 
  6.  
  7. void main() 
  8.  
  9.      printf("\nThis is unsem1 start!\n"); 
  10.      sleep(1);  //打印完一條消息間隔會有 
  11.      printf("\nThis is unsem1 end!\n"); 
  12.      

② unsem2.c。

  1. #include <unistd.h> 
  2. #include <sys/types.h> 
  3. #include <sys/stat.h> 
  4. #include <fcntl.h> 
  5. #include <stdio.h> 
  6.  
  7. void main() 
  8.     printf("\nThis is unsem2!\n");   

③ 3個腳本文件。

  1. ### 腳本run.sh 
  2. #!/bin/bash 
  3. ./run1.sh&./run2.sh 
  4.  
  5. ### 腳本文件——run1.sh 
  6. #!/bin/bash 
  7. ./unsem1 
  8.  
  9. ### 腳本文件——run2.sh 
  10. #!/bin/bash 
  11. ./unsem2 
  12.   

 

即腳本run.sh運行run1.sh和run2.sh,&可以進行程序的并行運行。

腳本run1.sh運行unsem1.c編譯處理的unsem1。

腳本run2.sh運行unsem2.c編譯處理的unsem2。

運行結果如下:

 

因為是并行運行,所以兩個程序不一定誰先運行,當unsem2先運行不影響unsem1,但當unsem1先運行時,unsem2的打印會插入到unsem1的兩個打印中間。

程序中用sleep就是為了給插入的機會。

3)加入信號量的情況

下面的文件與上面的文件放到了不同的文件夾下,所以腳本名稱是一樣的并不影響。

① sem1.c。

  1. #include <unistd.h> 
  2. #include <sys/types.h> 
  3. #include <sys/stat.h> 
  4. #include <fcntl.h> 
  5.  
  6. #include <sys/ipc.h>  
  7. #include <sys/types.h>  
  8. #include <sys/sem.h> 
  9. #include <stdio.h> 
  10.  
  11. #define KEY 1234 
  12.  
  13. union semun 
  14.       int val;     // 信號量的值 
  15.       struct semid_ds *buf; 
  16.       unsigned short *arrry; 
  17. }; 
  18.  
  19. void main() 
  20.  
  21.       key_t key
  22.       int semid; 
  23.       struct sembuf sop; 
  24.       int ret; 
  25.      
  26.  
  27.       // 創建鍵值 
  28.       //  key = ftok("./",1);                          //在當前目錄可以創建出多個鍵值,此方法沒用到 
  29.      
  30.       //創建信號量 
  31.       semid = semget((key_t)KEY, 1, 0666 | IPC_CREAT); // 利用鍵值創建一個信號量 
  32.      
  33.       union semun sem_union;                           // 定義給信號量賦值的結構并賦值 
  34.       sem_union.val = 1; 
  35.  
  36.       ret = semctl(semid,0,SETVAL,sem_union);          // 信號量的值設置為1 
  37.      
  38. //    ret = semctl(semid,0,GETVAL);                    // 獲得信號量的值,想要感受一下semctl可以放開這兩個注釋 
  39. //    printf("ret value  is %d\n",ret); 
  40.      
  41.       // 1 獲取信號量 
  42.       sop.sem_num = 0;//操作第一個信號量,編號為0 
  43.       sop.sem_op = -1;//-1為獲取信號量 
  44.       semop(semid,&sop,1);//由于定義的是變量,參數是指針所以取其地址 
  45.      
  46.       // 2 打印起始消息 
  47.       printf("\nThis is sem1 start!\n"); 
  48.      
  49.       // 3 間隔一會 
  50.       sleep(1); 
  51.      
  52.       // 4 打印結束消息 
  53.       printf("\nThis is sem1 end!\n"); 
  54.      
  55.       // 5 釋放信號量 
  56.       sop.sem_num = 0;//操作第一個信號量,編號為0 
  57.       sop.sem_op = 1;//加1為釋放信號量 
  58.       semop(semid,&sop,1);//由于定義的是變量,參數是指針所以取其地址 
  59.  
  60.   

② sem2.c。

  1. #include <unistd.h> 
  2. #include <sys/types.h> 
  3. #include <sys/stat.h> 
  4. #include <fcntl.h> 
  5.  
  6. #include <sys/ipc.h>  
  7. #include <sys/types.h>  
  8. #include <sys/sem.h> 
  9. #include <stdio.h> 
  10.  
  11. #define KEY 1234 
  12.  
  13. void main() 
  14.  
  15.       key_t key
  16.       int semid; 
  17.       struct sembuf sop; 
  18.       int ret; 
  19.      
  20.       // 打開與sem1相同的信號量 
  21.       semid = semget((key_t)KEY, 1, 0666 | IPC_CREAT); // 如果已經有這個信號量了,就不會創建,就直接打開了 
  22.      
  23.      
  24.       ret = semctl(semid,0,GETVAL);                    // 獲得信號量的值 
  25.       //    printf("ret value  is %d\n",ret); 
  26.      
  27.      
  28.       //獲取信號量 
  29.       sop.sem_num = 0;                                 // 操作第一個信號量,編號為0 
  30.       sop.sem_op = -1;                                 // -1為獲取信號量 
  31.       semop(semid,&sop,1);                             // 由于定義的是變量,參數是指針所以取其地址 
  32.      
  33.       // 打印sem2的消息 
  34.       printf("\nThis is sem2!\n"); 
  35.      
  36.       //釋放信號量 
  37.       sop.sem_num = 0;                                 // 操作第一個信號量,編號為0 
  38.       sop.sem_op = 1;                                  // 加1為釋放信號量 
  39.       semop(semid,&sop,1);                             // 由于定義的是變量,參數是指針所以取其地址   
  40.   

③ 3個腳本文件。

  1. ### 腳本run.sh 
  2. #!/bin/bash 
  3. ./run1.sh&./run2.sh 
  4.  
  5. ### 腳本文件——run1.sh 
  6. #!/bin/bash 
  7. ./sem1 
  8.  
  9. ### 腳本文件——run2.sh 
  10. #!/bin/bash 
  11. ./sem2 
  12.   

運行結果如下:


 

 

可以看到不管是sem1先運行還是sem2先運行,sem1的兩個打印都不會被打斷的。

提示:前面學了文件的操作,這里將終端打印作為共享的資源了,你也可以用操作同一個文件的方式去驗證信號量的互斥性哈,去試試吧。

本文轉載自微信公眾號「嵌入式雜牌軍」,可以通過以下二維碼關注。轉載本文請聯系嵌入式雜牌軍公眾號。

 

責任編輯:武曉燕 來源: 嵌入式雜牌軍
相關推薦

2020-11-05 09:59:24

Linux內核信號量

2024-07-25 11:53:53

2020-09-25 07:34:40

Linux系統編程信號量

2009-12-08 12:14:43

2010-04-21 16:25:13

Unix信號量

2010-04-21 16:42:48

Unix信號量

2020-11-10 15:25:26

SemaphoreLinux翻譯

2021-04-13 09:20:15

鴻蒙HarmonyOS應用開發

2010-04-21 16:50:31

Unix信號量

2021-09-07 07:53:42

Semaphore 信號量源碼

2010-04-21 15:37:38

Unix信號量

2024-10-29 15:23:45

Python線程安全

2020-09-04 10:14:02

Linux驅動7內核

2017-05-11 14:05:25

Consul分布式信號量

2019-11-19 09:00:38

JavaAND信號量

2010-03-17 16:36:10

Java信號量模型

2010-04-21 17:10:25

Unix信號量

2010-07-15 15:32:10

Perl線程

2016-11-23 16:08:24

Python處理器分布式系統

2010-03-16 17:52:27

Java多線程信號量
點贊
收藏

51CTO技術棧公眾號

欧美日韩在线播| 日韩一级片免费看| 男人影院在线观看| 四虎5151久久欧美毛片| 精品一区二区三区视频在线观看| 亚洲第一福利网| 警花观音坐莲激情销魂小说| 欧美一区二区三区久久久| 操欧美女人视频| 亚洲乱码国产乱码精品精98午夜 | 亚洲大型综合色站| 国产在线拍揄自揄视频不卡99| 中文字幕一区三区久久女搜查官| 99热国产在线| 狠狠色丁香久久婷婷综合_中| 一区二区在线视频| 女人另类性混交zo| 青青青免费视频在线2| 亚洲三级视频| 亚洲精品国产免费| 男人用嘴添女人下身免费视频| 亚洲大尺度视频| 一区二区三区在线观看免费| 欧美美女一区二区在线观看| 一区二区冒白浆视频| 中文字幕久久久久| 青青草成人影院| 在线免费观看日韩欧美| 婷婷精品国产一区二区三区日韩| 日本免费在线观看视频| 九九在线高清精品视频| 色噜噜久久综合| 深夜福利成人| 四虎精品一区二区三区| 亚洲综合国产激情另类一区| 亚洲欧美一区二区三区久久| 男人搞女人网站| 在线免费观看黄色| 国产乱人伦偷精品视频免下载| 久热99视频在线观看| 免费人成视频在线播放| 日韩精品卡一| 91日韩精品一区| 国产精品久久久久久久久男 | 国产免费av电影| 亚洲人体av| 日韩中文在线中文网三级| 国产在线视频三区| 国产福利亚洲| 一区二区三区四区国产精品| 精品福利影视| 最近中文字幕在线免费观看| 综合五月婷婷| 日韩视频免费看| 中文字幕在线视频播放| 婷婷激情一区| 亚洲色图19p| 精品久久精品久久| 天天干,天天操,天天射| 成人久久18免费网站麻豆| 日本国产精品视频| 亚洲综合网在线| 午夜a一级毛片亚洲欧洲| 亚洲第一中文字幕| 91黄色免费视频| 婷婷综合成人| 亚洲色图欧美制服丝袜另类第一页| 潘金莲激情呻吟欲求不满视频| 91破解版在线观看| 国产欧美日韩另类视频免费观看| 91精品视频免费| 亚洲熟妇无码乱子av电影| 亚洲欧美春色| 国产精品欧美在线| 国产精品无码在线播放| 麻豆九一精品爱看视频在线观看免费| 久久在线观看视频| 国模无码国产精品视频| 精品一区二区三区的国产在线观看| 日韩欧美亚洲另类制服综合在线| 亚洲少妇第一页| 四虎地址8848精品| 在线精品视频免费观看| 天天干天天操天天做| 在线天堂资源| 亚洲第一福利视频在线| 国产91对白刺激露脸在线观看| 1024在线播放| 精品久久久久久久久国产字幕| 神马午夜伦理影院| 男人影院在线观看| 亚洲综合在线第一页| 99亚洲精品视频| 91在线直播| 美国黑人一级大黄| 国产videos久久| 亚洲精品久久久久久下一站| 色欲AV无码精品一区二区久久| 亚洲aaa级| 日韩高清有码在线| 五月天丁香社区| 久久九九精品视频| 欧美一区二区在线视频| 亚洲欧美日韩三级| 福利片一区二区| 欧美一区二区三区成人| www.男人天堂| 农村少妇一区二区三区四区五区| 日韩精品一区在线观看| 在哪里可以看毛片| 国产成人影院| 欧美国产激情18| 免费在线视频观看| 午夜欧美视频| 欧美激情视频一区| 亚洲精品一区二三区| 日韩国产欧美三级| 国产极品jizzhd欧美| 精品国产乱子伦| 国产黑丝在线一区二区三区| 97自拍视频| 囯产精品久久久久久| 成人综合婷婷国产精品久久蜜臀| 日韩精彩视频| 欧洲不卡av| 色综合婷婷久久| 欧美一级裸体视频| 色橹橹欧美在线观看视频高清| 久久九九国产精品怡红院| 日韩激情综合网| 欧美一区二区三区久久精品| 国产不卡av在线免费观看| 亚洲成人黄色片| ...av二区三区久久精品| 国产成人免费高清视频| 日本黄色一区| 日韩一卡二卡三卡| 这里只有精品在线观看视频| 91tv精品福利国产在线观看| 久久久久久com| 亚洲欧美另类在线视频| 99麻豆久久久国产精品免费 | 国产亚洲第一伦理第一区| 久久久久久久久久久亚洲| 国产激情视频在线播放| 99久久精品费精品国产一区二区| 欧美男人的天堂| 天天影视久久综合| 亚洲无人区一区| 国产成人精品无码播放| 色综合久久中文| 91wwwcom在线观看| 91国内精品视频| 成人av电影在线| 亚洲国产成人不卡| 肉肉视频在线观看| 欧美一区二区三区免费大片 | 欧美最顶级丰满的aⅴ艳星| 人妻一区二区三区四区| 亚洲成人你懂的| 捆绑凌虐一区二区三区| 国产精品久久久亚洲一区| 国产精品小说在线| 乱精品一区字幕二区| 亚洲国产日韩av| 香港三级日本三级| 日韩综合在线视频| 天天综合狠狠精品| 国产免费av国片精品草莓男男| 日韩精品在线第一页| 黑鬼狂亚洲人videos| 国产精品123区| 亚洲国产精品成人天堂| 日本免费一区二区三区等视频| 久久精品福利视频| 国产 日韩 欧美 综合| 疯狂蹂躏欧美一区二区精品| 久久精品一卡二卡| 国产欧美日韩一区二区三区四区| 国产精品日韩在线观看| 国内外激情在线| 色综合天天狠狠| 丁香六月激情综合| 久久亚洲图片| 精品在线观看一区二区| 韩国精品主播一区二区在线观看| 亚洲第一精品电影| 精品久久久久久久久久久国产字幕| 国产精品免费av| 国产淫片av片久久久久久| 成人久久久久| 国产精品久久亚洲7777| 成码无人av片在线观看网站| 欧美日韩一卡二卡三卡| 久久国产精品波多野结衣| 91欧美激情一区二区三区成人| 超碰在线97免费| 国产一区欧美| 91精品婷婷国产综合久久蝌蚪| av中文字幕在线观看第一页| 中文字幕亚洲图片| 中国一区二区视频| 一卡二卡欧美日韩| 日本乱子伦xxxx| 成人听书哪个软件好| 欧美wwwwwww| 亚洲中午字幕| 女人床在线观看| 欧美一级精品| 九九九九九精品| 黄色aa久久| 亚洲精品二三区| 91久久精品国产91性色69| 五月天久久比比资源色| 欧美做爰啪啪xxxⅹ性| 久久久国产精品麻豆| 国产精品人人妻人人爽人人牛| 亚洲制服欧美另类| aa成人免费视频| 欧美videos另类精品| 精品精品国产高清a毛片牛牛| 免费视频网站www| 久久久一区二区| 四虎精品一区二区| 国内精品久久久久影院色| www.日日操| 国产精品入口66mio| 人体内射精一区二区三区| 五月天久久777| aa成人免费视频| 二区三区精品| 国产女精品视频网站免费| 三上悠亚亚洲一区| 欧美亚洲国产精品| 在线看的av网站| 亚洲精品一区二区在线| 天天干,夜夜操| 亚洲电影第1页| 亚洲精品国产精品国| 日韩免费观看高清完整版在线观看| 在线观看亚洲一区二区| 亚洲精品乱码久久久久久日本蜜臀| 极品久久久久久久| 国产欧美日韩另类一区| 精品人妻中文无码av在线| 国产欧美日韩亚州综合 | jizz性欧美23| 国产91社区| 欧美大胆性生话| 欧美在线视频a| 中文在线8资源库| 国产成人精品久久| 高清电影一区| 国产精品久久久久久搜索| 韩国女主播一区二区| 国产精品视频男人的天堂| 欧美国产日韩电影| 国产有码一区二区| 不卡的国产精品| 欧美一区二区三区艳史| 中文在线免费二区三区| 国产成人a亚洲精品| 日韩欧美2区| 91免费高清视频| 香蕉成人app| 国产精品久久久久久久久免费看| 成人自拍视频网| 成人亚洲欧美一区二区三区| 在线精品亚洲欧美日韩国产| 欧美成人中文字幕| 国产高清av在线| 亚洲二区在线播放视频| 天天操天天干天天操| 国产丝袜一区二区三区| 成年人在线视频| 日韩精品黄色网| 成人av电影观看| 欧美乱大交做爰xxxⅹ性3| yw视频在线观看| 久久精品国产99国产精品澳门 | 国产精品剧情在线亚洲| 久久国产美女视频| 亚洲电影在线播放| 成人a v视频| 欧美一区二区日韩| 亚州视频一区二区三区| 欧美一级淫片007| 人妻丰满熟妇av无码区hd| 亚洲香蕉成视频在线观看| 欧美自拍偷拍一区二区| 亚洲欧美精品中文字幕在线| 午夜激情在线观看| 91国产高清在线| 国产人妖一区| 国产黑人绿帽在线第一区| 日韩久久一区| 国偷自产av一区二区三区小尤奈| 麻豆精品一区| 久久久神马电影| 91精品国产麻豆国产在线观看 | 鲁丝一区鲁丝二区鲁丝三区| 日韩视频一区二区三区四区| 久久久久久九九| 亚洲精品国产偷自在线观看| 日韩黄色片视频| 亚洲综合精品四区| 亚洲一区二区偷拍| 久久精品在线免费观看| 久草视频在线资源| 欧美日韩精品一区二区在线播放| 男人天堂视频网| 精品国产免费久久| 欧美 日韩 国产 在线| 日韩在线视频免费观看高清中文| 51漫画成人app入口| 91人成网站www| 欧美综合在线视频观看 | 免费男女羞羞的视频网站在线观看| 国产精品久久久999| 国产情侣一区二区三区| 久久综合色一本| 亚洲成人在线| 亚洲色欲综合一区二区三区| 国产盗摄精品一区二区三区在线| 91在线无精精品白丝| 黄色一区二区在线观看| 成人高潮片免费视频| 亚洲电影免费观看高清完整版在线| 日本成人网址| 国产精品视频白浆免费视频| 少妇精品久久久一区二区| 免费 成 人 黄 色| 国产不卡高清在线观看视频| 国产精品无码电影| 夜夜精品视频一区二区| 99久久婷婷国产一区二区三区| 中日韩美女免费视频网址在线观看 | 色偷偷偷综合中文字幕;dd| 成人av观看| 久久久国产精品一区二区三区| 亚洲国产高清一区| 亚洲天堂av网站| 亚洲一区二区高清| 国产 日韩 欧美 综合| 欧美精品videos另类日本| 亚洲国产视频二区| 欧美精品一区二区视频| 亚洲精选91| 免费无码一区二区三区| 天天色天天操综合| 四虎影视2018在线播放alocalhost| 在线成人一区二区| 国产另类xxxxhd高清| 色播亚洲视频在线观看| 日韩精品亚洲一区| 日本高清黄色片| 欧美猛男gaygay网站| 国产黄网站在线观看| 97超级碰碰| 99国产精品私拍| 伊人免费视频二| 亚洲免费观看视频| 性做久久久久久久久久| 久久噜噜噜精品国产亚洲综合| 97人人做人人爽香蕉精品| 四虎影院一区二区三区| 久久99精品久久久久久动态图| 日韩欧美综合视频| 精品国产乱码久久久久久牛牛 | 天堂av2020| 91美女片黄在线观看91美女| 国产黄色免费观看| 日韩精品最新网址| a在线视频v视频| 欧美日韩精品免费看| 蜜臀va亚洲va欧美va天堂| 特级西西人体wwwww| 亚洲欧美日韩中文播放| www.av黄色| 茄子视频成人在线| 欧美高清视频手机在在线| 久久无码高潮喷水| 国产三级精品视频| 中国一级特黄毛片| 欧美电视剧在线看免费| 国产激情视频在线看| 亚洲草草视频| 国产成人aaaa| 免费黄色片视频| 欧美日本啪啪无遮挡网站| 欧美wwwsss9999| 九九热精品在线播放| 亚洲成人免费av| 日本中文字幕视频在线| 国模精品娜娜一二三区| 美女视频黄a大片欧美| 久久久久久久99| 亚洲第一福利网| 欧美高清免费| 99热在线这里只有精品|