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

主頁 > 知識庫 > linux shell之文件鎖

linux shell之文件鎖

熱門標簽:測繪地圖標注名稱 智能電銷機器人有用嗎 外呼電話系統(tǒng)怎么操作 怎么在百度地圖標注公司的位置 商機地圖標注 鶴崗400電話申請 德陽400電話申請 天津電話外呼系統(tǒng)排名 百度地圖標注直線距離

經(jīng)常在 shell 腳本里要阻止其它進程,比如 msmtp 自帶的mail queue 腳本,這個腳本的互斥做法是不正確的,下面介紹下發(fā)現(xiàn)的三個通過文件達到互斥的正確做法。

1. util-linux 的 flock

這個命令有兩種用法:  flock LOCKFILE COMMAND  ( flock -s 200; COMMAND; ) 200>LOCKFILEflock 需要保持打開鎖文件,對于第二種使用方式并不方便,而且 -s 方式指定文件句柄可能沖突。好處是不需要顯式的解鎖,進程退出后鎖必然釋放。

2. liblockfile1 的 dotlockfile

號稱最靈活可靠的文件鎖實現(xiàn)。其等待時間跟  -r 指定的重試次數(shù)有關,重試時間為 sum(5, 10, ..., min(5*n, 60), ...).鎖文件不需要保持打開, 帶來的問題是需要用 trap EXIT 確保進程退出時刪除鎖文件.

3. procmail 的 lockfile

跟 dotlockfile 類似, 但可以一次性創(chuàng)建多個鎖文件.
 
在SHELL中實現(xiàn)文件鎖,有兩種簡單的方式。

一是利用普通文件,在腳本啟動時檢查特定文件是否存在,如果存在,則等待一段時間后繼續(xù)檢查,直到文件不存時創(chuàng)建該文件,在腳本結(jié)束時刪除文件。為確保腳本在異常退出時文件仍然能被刪除,可以借助于trap "cmd" EXIT TERM INT命令。一般這類文件存放在/var/lock/目錄下,操作系統(tǒng)在啟動時會對該目錄做清理。
另一種方法是是使用flock命令。使用方式如下,這個命令的好處是等待動作在flock命令中完成,無需另外添加代碼。
( flock 300 ...cmd... flock -u 300 ) > /tmp/file.lock
但flock有個缺陷是,在打開flock之后fork(),子進程也會擁有鎖,如果在flock其間有運行daemon的話,必需確保daemon在啟動時已經(jīng)關閉了所有的文件句柄,不然該文件會因為daemon一直將其置于打開狀態(tài)而無法解鎖。


一個實現(xiàn)linux shell文件鎖的例子
最近看到很多討論如何能不讓腳本重復執(zhí)行的問題,實際就是文件鎖的概念,寫了一個小例子:
把這個作為文件開頭不會產(chǎn)生重復執(zhí)行的情況。(我想兩個執(zhí)行腳本的文件名一模一樣應該不會經(jīng)常出現(xiàn)吧)

#!/bin/bash
LockFile()
{
 find/dev/shm/* -maxdepth 0 -type l -follow -exec unlink {} \;
 [ -f /dev/shm/${0##*/}]exit
 ln -s /proc/$$/dev/shm/${0##*/}
 trap "Exit" 0 1 2 3 15 22 24
}
Exit()
{
 unlink /dev/shm/${0##*/};
 exit 0;
}
LockFile
# main program
# program ......
#Exit

/var/lock/subsys目錄的作用的說明
很多程序需要判斷是否當前已經(jīng)有一個實例在運行,這個目錄就是讓程序判斷是否有實例運行的標志,比如說xinetd,如果存在這個文件,表示已經(jīng)有xinetd在運行了,否則就是沒有,當然程序里面還要有相應的判斷措施來真正確定是否有實例在運行。
通常與該目錄配套的還有/var/run目錄,用來存放對應實例的PID,如果你寫腳本的話,會發(fā)現(xiàn)這2個目錄結(jié)合起來可以很方便的判斷出許多服務是否在運行,運行的相關信息等等。
   實際上,判斷是否上鎖就是判斷這個文件,所以文件存在與否也就隱含了是否上鎖。而這個目錄的內(nèi)容并不能表示一定上鎖了,因為很多服務在啟動腳本里用touch來創(chuàng)建這個加鎖文件,在系統(tǒng)結(jié)束時該腳本負責清除鎖,這本身就不可靠(比如意外失敗導致鎖文件仍然存在),我在腳本里一般是結(jié)合PID文件(如果有PID文件的話),從PID文件里得到該實例的PID,然后用ps測試是否存在該PID,從而判斷是否真正有這個實例在運行,更加穩(wěn)妥的方法是用進程通訊了,不過這樣的話單單靠腳本就做不到了。
 
flock命令在我的系統(tǒng)屬于util-linux-2.13-0.46.fc6包,如果沒有此命令,嘗試更新您系統(tǒng)下的util-linux包。
介紹此命令的原因:
論壇中曾有woodie兄寫的腳本串行化的討論,已經(jīng)很完善了。
但flock此命令既與shell腳本結(jié)合的很好,而且與C/PERL/PHP等語言的flock函數(shù)用法很相似,使用起來也很簡單。相比之下,woodie兄那篇的內(nèi)容需要不淺的shell功底來理解。
兩種格式分別為:
       flock [-sxon] [-w timeout] lockfile [-c] command...

       flock [-sxun] [-w timeout] fd
介紹一下參數(shù):
-s為共享鎖,在定向為某文件的FD上設置共享鎖而未釋放鎖的時間內(nèi),其他進程試圖在定向為此文件的FD上設置獨占鎖的請求失敗,而其他進程試圖在定向為此文件的FD上設置共享鎖的請求會成功。
-e為獨占或排他鎖,在定向為某文件的FD上設置獨占鎖而未釋放鎖的時間內(nèi),其他進程試圖在定向為此文件的FD上設置共享鎖或獨占鎖都會失敗。只要未設置-s參數(shù),此參數(shù)默認被設置。
-u手動解鎖,一般情況不必須,當FD關閉時,系統(tǒng)會自動解鎖,此參數(shù)用于腳本命令一部分需要異步執(zhí)行,一部分可以同步執(zhí)行的情況。
-n為非阻塞模式,當試圖設置鎖失敗,采用非阻塞模式,直接返回1,并繼續(xù)執(zhí)行下面語句。
-w設置阻塞超時,當超過設置的秒數(shù),就跳出阻塞,返回1,并繼續(xù)執(zhí)行下面語句。
-o必須是使用第一種格式時才可用,表示當執(zhí)行command前關閉設置鎖的FD,以使command的子進程不保持鎖。
-c執(zhí)行其后的comand。
舉個實用的例子:

#!/bin/bash
{
flock -n 3
[ $? -eq 1 ]  { echo fail; exit; }
echo $$
sleep 10
} 3>mylockfile


此例的功能為當有一個腳本實例正在執(zhí)行時,另一個試圖執(zhí)行該腳本的進程會失敗退出。
sleep那句可以換成您需要執(zhí)行的語句段。
這里請注意一點,我使用>打開mylockfile,原因是定向文件描述符是先于命令執(zhí)行的。因此假如在您要執(zhí)行的語句段中需要讀寫mylockfile文件,例如想獲得上一個腳本實例的pid,并將此次的腳本實例的pid寫入mylockfile。此時直接用>打開mylockfile會清空上次存入的內(nèi)容,而用打開mylockfile當它不存在時會導致一個錯誤。當然這些問題都可以用其他方法解決,我只是點出這種最通用的方法。

【背景介紹】

CU上曾經(jīng)有幾個帖子討論到一個實際問題,就是如何限制同一時刻只允許一個腳本實例運行。其中本版新老斑竹和其它網(wǎng)友都參加了討論,但以faintblue兄的帖子對大家啟發(fā)最大,下面的背景介紹中許多內(nèi)容都是來自于他。在此感謝faintblue兄,也感謝斑竹和其它朋友!
woodie總結(jié)了一下現(xiàn)有的結(jié)果,大體上可以分為兩種思路:
一、簡單的方法是,用ps一類命令找出已經(jīng)運行腳本的數(shù)量,如果大于等于2(別忘了把自己也算進去^_^),就退出當前腳本,等于1,則運行。這種方法簡單是簡單,不過有一些問題:
首先,ps取得腳本文件進程數(shù)量就有很多陷阱,例如有時無法ps到腳本文件的名稱;
即使可以ps到腳本名,如果用到管道的話,由于子shell的原因,在大多數(shù)平臺下會得到奇怪的結(jié)果,有時得到數(shù)字a,有時又得到數(shù)字b,讓人無所適從;
就算計數(shù)的問題已經(jīng)解決了,還有問題,不過不太嚴重:如果兩個腳本實例同時計數(shù),顯然數(shù)字都應該等于2,于是兩個都退出了。于是在這一時間點上沒有一個腳本在執(zhí)行;

二、加鎖的方法。就是腳本在執(zhí)行開始先試圖得到一個“鎖”,得到則繼續(xù)執(zhí)行,反之就退出。
加鎖方法也存在一些問題,主要集中在兩個方面:
其一,加鎖時如何避免競態(tài)條件(race condition)。即如何找到一些“原子”操作,使得加鎖的動作一步完成,中間不能被打斷。否則就可能出現(xiàn)下面的情況:
腳本1檢測到?jīng)]有鎖被占用;
然后腳本2也檢測到?jīng)]有鎖被占用;
腳本1加鎖,開始執(zhí)行;
然后腳本2(錯誤地)加鎖,也開始執(zhí)行;
看到嗎,兩個腳本在同時執(zhí)行。:(
可能的一些加鎖的“原子”操作有:
1.創(chuàng)建目錄,當一個進程創(chuàng)建成功后其它進程都會失??;
2.符號鏈接:ln -s,一個鏈接創(chuàng)建后其它進程的ln -s命令會出錯;
3.文件首行的競爭,多個進程以append的方式同時寫到文件,只有惟一一個進程寫到了文件的第一行,因為不可能有兩個第一行。^_^
4.其它軟件包的加鎖工具,通常是c語言二進制程序,自己寫的也行。
目前加鎖時的問題已經(jīng)可以解決。
其二,找到一種方法避免出現(xiàn)“死鎖”的情況,這里是指:雖然“鎖”被占用,但卻沒有腳本在執(zhí)行。這通常在腳本意外退出,來不及釋放占用的“鎖”之后。如收到一些系統(tǒng)信號后退出,機器意外掉電后退出等。
對于前者的情況,可以用trap捕獲一些信號,在退出前釋放鎖;但有些信號是無法捕獲的。
對于后者,可以在機器重起后用腳本自動刪除鎖來解決。不過有點麻煩。
所以比較理想的是腳本自己來檢測死鎖,然后釋放它。不過問題的難點在于如何找到一種“原子”操作,將檢測死鎖和刪除死鎖的動作一步完成,否則又會出現(xiàn)與加鎖時同樣的競態(tài)條件的問題。例如:
進程1檢測到死鎖;
進程2監(jiān)測到死鎖;
進程1刪除死鎖;
進程x(也可能是進程1自己)加鎖,開始運行;
進程2(錯誤地)刪除死鎖;
此時鎖沒有占用,于是任意進程都可以加鎖并投入運行。
這樣又出現(xiàn)了兩個進程同時運行的情況。:(
可惜的是:在迄今為止的討論之后,woodie還沒有找到一種合適的“原子”操作。:(只是找到了一種稍微好些的辦法:就是在刪除時用文件的inode作標識,于是其它進程新建的鎖(文件名雖然相同,但inode相同的機率比較微?。┎蝗菀妆灰馔鈩h除。這個方法已經(jīng)接近完美了,可惜還是存在誤刪的微小幾率,不能說是100%安全。唉,山重水復疑無路?。?(

最近又有網(wǎng)友問起這個問題,促使我又再次思考。從我以前的一個想法發(fā)展了一下,換了一種思路,便有豁然開朗的感覺。不敢藏私,寫出來請大家debug。^_^

基本的想法就是:借鑒多進程編程中臨界區(qū)的概念,如果各個進程進入我們設立的臨界區(qū),只可能一個一個地順序進入,不就能保證每次只有一個腳本運行了嗎?怎樣建立這樣一種臨界區(qū)呢?我想到了一種方法,就是用管道,多個進程寫到同一個管道,只可能一行一行地進入,相應的,另一端也是一行一行地讀出,如此就可以實現(xiàn)并行執(zhí)行的多個進程進入臨界區(qū)時的“串行化”。這與faintblue兄以前貼出的append文件的方法也是異曲同工。
我們可以讓并行的進程同時向一個管道寫一行請求,內(nèi)容是其進程號,在管道另一端順序讀取這些請求,但只有第一個請求會得到一個“令牌”,被允許開始運行;后續(xù)的請求將被忽略,對應的進程沒有得到令牌,就自己退出。這樣就保證了任意時間只有一個進程運行(嚴格地說是進入臨界區(qū))。說到“令牌”,熟悉網(wǎng)絡發(fā)展史的朋友可能會聯(lián)想到IBM的Token Ring架構(gòu),每一時刻只能有一個主機得到令牌并發(fā)送數(shù)據(jù),沒有以太網(wǎng)的“碰撞”問題??上缤⑼ǖ兰夹g一樣,IBM的技術是不錯,但最終還是被淘汰了。不錯,這里令牌的概念就是借用于Token Ring。^_^
當一個進程執(zhí)行完畢,向管道發(fā)送一個終止信號,即交回“令牌”,另一端接受到后,又開始選取下一個進程發(fā)放“令牌”。
您可能會問了,那么死鎖問題又如何解決呢?別急,我在以前的討論中曾提出將檢測處理死鎖的代碼單獨拿出來,交給一個專門的進程來處理的想法,這里就具體實踐這樣一種思路。當檢測和刪除死鎖的任務由一個專門的進程來執(zhí)行時,就沒有多個并發(fā)進程對同一個鎖進行操作,所以競態(tài)條件發(fā)生的物質(zhì)基礎也就根本不存在了。^_^
再發(fā)展一下這個思路,允許同時執(zhí)行多個進程如何?當然可以!只要設立一個計數(shù)器,達到限制的數(shù)字就停止發(fā)放“令牌”即可。
下面就是woodie上述思路的一個實現(xiàn),只是在centos 4.2下簡單地測試了一下,可能還有不少錯誤,請大家?guī)兔Α俺x”。^_^思路上有什么問題也請不吝指教:
腳本1,token.sh,負責令牌管理和死鎖檢測處理。與下一個腳本一樣,為了保持腳本的最大的兼容性,盡量使用Bourne shell的語法,并用printf代替了echo,sed的用法也盡量保持通用性。這里是由一個命名管道接受請求,令牌在一個文件中發(fā)出。如果用ksh也許可以用協(xié)進程來實現(xiàn),熟悉ksh的朋友可以試一試。^_^

#!/bin/sh 
#name: token.sh 
#function: serialized token distribution, at anytime, only a cerntern number of token given out 
#usage: token.sh [number]  
#number is set to allow number of scripts to run at same time 
#if no number is given, default value is 1 
if [ -p /tmp/p-aquire ]; then 
 rm -f /tmp/p-aquire 
fi 
if mkfifo /tmp/p-aquire; then 
 printf "pipe file /tmp/p-aquire created\n" >>token.log 
else 
 printf "cannot create pipe file /tmp/p-aquire\n" >>token.log 
 exit 1 
fi 

loop_times_before_check=100 
if [ -n "$1" ];then 
 limit=$1 
else 
 # default concurrence is 1 
 limit=1 
fi 
number_of_running=0 
counter=0 
while :;do 
 #check stale token, which owner is died unexpected 
 if [ "$counter" -eq "$loop_times_before_check" ]; then 
  counter=0 
  for pid in `cat token_file`;do 
   pgrep $pid 
   if [ $? -ne 0 ]; then 
    #remove lock 
      printf "s/ $pid//\nwq\n"|ed -s token_file 
      number_of_running=`expr $number_of_running - 1` 
   fi 
  done 
 fi 
 counter=`expr $counter + 1` 

 # 
 if [ "$number_of_running" -ge "$limit" ];then 
  # token is all given out. bypass all request until a instance to give one back 
  pid=`sed -n '/stop/ {s/\([0-9]\+\) \+stop/\1/p;q}' /tmp/p-aquire` 
  if [ -n "$pid" ]; then 
   # get a token returned 
   printf "s/ $pid//\nwq\n"|ed -s token_file 
   number_of_running=`expr $number_of_running - 1` 
   continue 
  fi 
 else 
  # there is still some token to give out. serve another request 
  read pid action  /tmp/p-aquire 
    if [ "$action" = stop ]; then 
     # one token is given back. 
     printf "s/ $pid//\nwq\n"|ed -s token_file 
     number_of_running=`expr $number_of_running - 1` 
    else 
     # it's a request, give off a token to instance identified by $pid 
     printf " $pid" >> token_file 
     number_of_running=`expr $number_of_running + 1` 
    fi 
 fi 
done

--------------------------------------------------------------------------------------------
修訂記錄:
1.修正token.sh的一個BUG,將原來用sed刪除失效令牌的命令用ed命令代替。感謝r2007和waker兩位指出錯誤!
--------------------------------------------------------------------------------------------

腳本2:并發(fā)執(zhí)行的腳本 -- my-script。在"your code goes here"一行后插入你自己的代碼,現(xiàn)有的是我用來測試的。

#!/bin/sh 
# second to wait that the ditributer gives off a token 
a_while=1 
if [ ! -p /tmp/p-aquire ]; then 
 printf "cannot find file /tmp/p-aquire\n" >2 
 exit 1 
fi 
# try to aquire a token 
printf "$$\n" >> /tmp/p-aquire 
sleep $a_while 
# see if we get one 
grep "$$" token_file 
if [ $? -ne 0 ]; then 
 # bad luck. :( 
 printf "no token free now, exitting...\n" >2 
 exit 2 
fi

這個腳本是將文件鎖得,不過我對這腳本還有一些疑惑的地方,暫且不討論,等以后回頭再來談

#!/bin/sh

# filelock - A flexible file locking mechanism.
retries="10"      # default number of retries
action="lock"      # default action
nullcmd="/bin/true"   # null command for lockfile

while getopts "lur:" opt; do
 case $opt in
  l ) action="lock"   ;;
  u ) action="unlock"  ;;
  r ) retries="$OPTARG" ;;
 esac
done
shift $(($OPTIND - 1))

if [ $# -eq 0 ] ; then
 cat  EOF >2
Usage: $0 [-l|-u] [-r retries] lockfilename
Where -l requests a lock (the default), -u requests an unlock, -r X
specifies a maximum number of retries before it fails (default = $retries).
EOF
 exit 1
fi

# Ascertain whether we have lockf or lockfile system apps

if [ -z "$(which lockfile | grep -v '^no ')" ] ; then
 echo "$0 failed: 'lockfile' utility not found in PATH." >2
 exit 1
fi

if [ "$action" = "lock" ] ; then
 if ! lockfile -1 -r $retries "$1" 2> /dev/null; then
  echo "$0: Failed: Couldn't create lockfile in time" >2
  exit 1
 fi
else  # action = unlock
 if [ ! -f "$1" ] ; then
  echo "$0: Warning: lockfile $1 doesn't exist to unlock" >2
  exit 1
 fi
 rm -f "$1"
fi

exit 0

您可能感興趣的文章:
  • linux 可執(zhí)行文件與寫操作的同步問題(文件讀寫操作產(chǎn)生的鎖機制)
  • 淺析Linux下一個簡單的多線程互斥鎖的例子
  • 詳解Linux文件鎖flock
  • Linux多線程鎖屬性設置方法
  • linux中各種鎖機制的使用與區(qū)別詳解

標簽:百色 自貢 鎮(zhèn)江 丹東 武漢 滁州 六盤水 優(yōu)質(zhì)小號

巨人網(wǎng)絡通訊聲明:本文標題《linux shell之文件鎖》,本文關鍵詞  linux,shell,之,文件,鎖,linux,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《linux shell之文件鎖》相關的同類信息!
  • 本頁收集關于linux shell之文件鎖的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    26uuu另类欧美亚洲曰本| 日本va欧美va欧美va精品| 日韩欧美自拍偷拍| 久久精品嫩草影院| 色噜噜狠狠一区二区三区果冻| 99久久99久久精品国产| 国产精品入口日韩视频大尺度| 羞羞免费视频网站| 91麻豆精品国产91久久久使用方法| 99久久99久久精品免费观看| 欧美精品久久一区二区| 欧美日韩有码| 日日av拍夜夜添久久免费| 精品国产免费一区二区三区| 国产精品系列在线| 福利片免费在线观看| 久久久久久蜜桃| 男人天堂视频网| 久久99国产精品免费| 亚洲午夜视频在线观看| 日本乱人伦a精品| 亚洲最新中文字幕| 91精品无人成人www| 日本三级理论片| 中日韩男男gay无套| 亚洲一区三区在线观看| 精品国产一区二| 在线观看免费观看在线| 国产·精品毛片| 欧美性猛交xxx乱大交3蜜桃| 日韩黄色在线播放| 亚洲天天影视| 国产有色视频色综合| 久久毛片高清国产| 日本老熟妇毛茸茸| 99riav在线| 四虎影视在线观看2413| 五月婷婷六月婷婷| 亚洲精品一区在线| 欧美激情图片小说| 女同性一区二区三区人了人一| 亚洲黄色片免费看| 中文字幕一区日韩精品| 羞羞的视频在线| 色诱视频网站一区| 97精品国产福利一区二区三区| 亚洲日本一区二区三区在线观看| 亚洲摸下面视频| 人人影院免费大片| 亚洲一区二区免费视频| 日本美女高清在线观看免费| 最新国产一区二区| 一区二区三区不卡在线| 三级精品视频久久久久| 日韩视频中文字幕| 夜夜爽www精品| 久久久久久久亚洲精品| 在线观看中文av| av在线国产精品| 免费在线观看a视频| 正在播放亚洲1区| 天堂社区日本电影超碰| 国产视频一区免费看| 123成人网| 五月婷婷之综合激情| 91在线porny国产在线看| 亚洲天堂中文字幕| 欧美日韩精品三区| 最新国产精品久久| 国产欧美精品日韩精品| 精品欧美aⅴ在线网站| aa免费在线观看| 哥也色在线视频| 欧美成人免费全部网站| www.日韩精品| 国产区一区二区三| 成人美女大片| 欧美日韩免费一区二区三区视频| 成人av电影免费观看| 国产精品成人国产乱一区| 另类尿喷潮videofree| 五月天丁香在线| 欧美性一区二区三区| 国产成人在线视频网站| 日韩专区第一页| 欧美成人免费视频| 一区二区激情小说| 国产日韩成人精品| 欧美黄色网络| 日韩视频一区二区三区在线播放| 欧美性猛交xxxx免费看蜜桃| 色域天天综合网| 激情五月***国产精品| 久久丫精品忘忧草西安产品| 中文人妻av久久人妻18| 欧美亚日韩国产aⅴ精品中极品| 91精品国产福利| 高清欧美一区二区三区| 男女曰b免费视频| 国产网友自拍视频| av毛片久久久久**hd| 一区二区小说| 美女免费视频黄| 精品国产欧美一区二区| 国产h在线观看| 国产情侣激情自拍| 久88久久88久久久| 国产精品久久久久久久久久久久冷| www.久久热.com| 精品少妇人妻av免费久久洗澡| 亚洲视频在线不卡| 极品少妇xxxx精品少妇偷拍| 91在线观看免费高清| 不卡一区在线观看| 日韩色性视频| 精品美女国产在线| 国产成人三级一区二区在线观看一| 国产成人a视频高清在线观看| 欧美日韩视频在线第一区| 亚洲欧美另类在线| 国产精品裸体一区二区三区| 欧美少妇一级片| 欧美亚洲高清一区二区三区不卡| 国产亚洲精品美女| 亚洲国产综合久久精品小蝴蝶| 免费女人毛片视频| 自由日本语亚洲人高潮| av成人激情| 欧美一区二区三区免费看| 91免费版网站入口| 黄网站视频在线观看| 亚洲18女电影在线观看| 欧美日韩国产一区二区三区| 合欧美一区二区三区| 精品免费99久久| 国产麻豆一区二区三区精品视频| 日韩中文字幕无砖| 久久国产中文字幕| 黄色成人羞羞视频| 中国china体内裑精亚洲片| 国产一区二区在线影院| 亚洲一区在线观看视频| www.麻豆av| a级片一区二区| 精品国产免费观看一区| 欧美在线观看视频一区二区| 亚洲成av人片在线观看无码| 一区二区三区国产好| 日韩免费久久| 亚洲美女精品成人在线视频| 亚洲黄色三级视频| √8天堂资源地址中文在线| 国产精品嫩草影院精东| 亚洲日本一区二区三区| 久久久精品久久久久久96| 国产精品探花一区二区在线观看| 日本亚洲不卡| 9191久久久久久久久久久| 国产 xxxx| 欧产日产国产v| 久久久99国产精品免费| 黑人精品xxx一区一二区| 日本高清视频免费观看| 日韩欧美黄色大片| 国外成人在线播放| 欧美片一区二区| 欧美日本韩国一区| 亚洲区综合中文字幕日日| 蜜桃视频在线观看网站| 色综合天天综合给合国产| 日本在线аv| 国产免费av观看| 欧美日韩精品免费观看视频| 国产不卡在线一区| 中文字幕日本一区| 日本边添边摸边做边爱的第三级| 日韩中文字幕在线视频播放| 亚洲综合免费观看高清完整版| 蜜桃一级网站.| 欧美图片激情小说| av在线播放不卡| 久久国产午夜精品理论片最新版本| 久久无码人妻精品一区二区三区| 天天操天天爱天天爽| 激情丁香在线| 久久久久久成人| 国产乱淫a∨片免费视频| 97xxxxx| 57pao成人永久免费视频| 一区二区在线免费播放| 久久午夜国产精品| 亚洲精品一二三四区| 制服丝袜影音| 国产精品欧美日韩久久| 亚洲视频免费观看| 成人性生交大免费看| 色又黄又爽网站www久久| 天堂成人av| www.好吊操| 亚洲国产裸拍裸体视频在线观看乱了中文| www.99色| 日韩欧美不卡视频| 欧美一区中文字幕| 91嫩草国产在线观看| 最近2019年好看中文字幕视频| 亚洲三区在线播放| 亚洲无人区码一码二码三码的含义| 中文字幕人妻一区二区三区视频| a毛片在线看免费观看| 亚洲国产视频二区| www.欧美日韩国产在线| 不卡av中文字幕| 国产馆手机在线观看| 国产在线精品一区免费香蕉| 天天想你在线观看完整版电影免费| 亚洲精品888| 日韩成人av电影| 丝袜亚洲另类欧美| 欧美视频小说| 天天色天天草| 欧美aa在线| 亚洲图片久久| 成人美女在线观看| 日韩av一区二区三区在线观看| 99精品人妻少妇一区二区| 制服丝袜中文字幕在线| 欧美激情视频在线| 亚洲国产中文字幕久久网| 欧美午夜精品久久久| 小日子的在线观看免费第8集| 日韩精品亚洲专区在线观看| 天堂av在线免费观看| 视频二区欧美| 欧美激情视频在线| 熟妇人妻av无码一区二区三区| 美腿丝袜亚洲一区| 国产偷人爽久久久久久老妇app| 久久99久久久久久久久久久| 日韩成人手机在线| 国产91精品视频在线观看| 日韩欧美视频免费在线观看| 秋霞午夜一区二区| 狠狠色狠狠色综合系列| 欧美一级在线免费| 亚洲精品无播放器在线播放| 综合久久综合| 国产99久久久久久免费看| 亚洲精品美女在线观看| 免费毛片一区二区三区久久久| 亚洲成av人片在线观看香蕉| 国产激情视频一区| 3dmax动漫人物在线看| 欧美性猛交xxxx黑人交| 久久久久久中文| 综合激情五月婷婷| 日本免费在线观看| 欧洲精品一区二区三区久久| 青青草手机在线视频| 人妻 日韩 欧美 综合 制服| 五月天亚洲精品| 国产一区二区在线观看视频| 在线观看日韩www视频免费| 亚洲精品观看| 国产精品wwww| 少妇高潮爽到全身痉挛抽搐| 强伦女教师2:伦理在线观看| 日本裸体美女视频| 亚洲无吗一区二区三区| 国产免费一区二区三区四在线播放| 很黄很a的视频| 精品久久久久久久久久| 在线影院自拍| 欧美 日韩 国产 高清| 国产黄色在线观看| 软萌小仙自慰喷白浆| 99精品国产99久久久久久97| 国产中文字幕在线免费观看| 看亚洲a级一级毛片| 日韩电影免费观看高清完整版| 水莓100国产免费av在线播放| 日韩伦理片在线观看| 五月天婷婷影视| 99精品视频在线免费播放| 秋霞午夜鲁丝一区二区老狼| 隣の若妻さん波多野结衣| 青青草99啪国产免费| 亚洲欧美中文字幕在线一区| xfplay5566色资源网站| 亚洲天堂在线视频观看| 日日av拍夜夜添久久免费| 欧美专区国产专区| 青娱乐精品在线| 美女精品一区最新中文字幕一区二区三区| 国产真实乱对白精彩久久| 影音先锋日韩| 成人在线免费| 国产精品午夜av在线| 3d动漫精品啪啪一区二区三区免费| 欧美精品99久久| 粉嫩av一区二区三区四区五区| 高清一区二区三区av| 国产精品2020| 国产精品精品久久久| 91中文字幕精品永久在线| 久久精品视频在线观看榴莲视频| 销魂美女一区二区三区视频在线| 国产精选一区二区三区不卡催乳| 免费日韩精品中文字幕视频在线| xxx欧美xxx| 欧美日韩1080p| 国产精品乱码一区二区| 欧美一区二区在线视频观看| 久久综合久中文字幕青草| jizzjizz国产精品喷水| 亚洲欧美日韩精品久久久| 国产chinese精品一区二区| 欧美精品tushy高清| 日日骚欧美日韩| 欧美高清在线一区| 亚洲av无日韩毛片久久| 国产精品国产亚洲精品看不卡| 91麻豆免费看片| 欧美大码xxxx| 久久综合色一综合色88| 精品麻豆一区二区三区| 国产又粗又猛又黄| 在线免费观看你懂的| 欧美人成在线观看ccc36|