亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Unix > 正文

UNIX高級(jí)環(huán)境編程(13)信號(hào)

2024-06-28 13:20:44
字體:
供稿:網(wǎng)友
UNIX高級(jí)環(huán)境編程(13)信號(hào) - 概念、signal函數(shù)、可重入函數(shù)

信號(hào)就是軟中斷。

信號(hào)提供了異步處理事件的一種方式。例如,用戶在終端按下結(jié)束進(jìn)程鍵,使一個(gè)進(jìn)程提前終止。

?

1 信號(hào)的概念

每一個(gè)信號(hào)都有一個(gè)名字,它們的名字都以SIG打頭。例如,每當(dāng)進(jìn)程調(diào)用了abort函數(shù)時(shí),都會(huì)產(chǎn)生一個(gè)SIGABRT信號(hào)。

每一個(gè)信號(hào)對(duì)應(yīng)一個(gè)正整數(shù),定義在頭文件<signal.h>中。

沒有信號(hào)對(duì)應(yīng)整數(shù)0,kill函數(shù)使用信號(hào)編號(hào)0表示一種特殊情況,所以信號(hào)編號(hào)0又叫做空信號(hào)(null signal)。

下面的各種情況會(huì)產(chǎn)生一個(gè)信號(hào):

  • 當(dāng)用戶在終端按下特定的鍵時(shí),會(huì)產(chǎn)生信號(hào)。例如,當(dāng)用戶按下DELETE按鍵(或Control-C)時(shí),會(huì)產(chǎn)生一個(gè)中斷信號(hào)(interrupt signal,SIGINIT),該信號(hào)使得一個(gè)運(yùn)行中的程序終止。
  • 硬件異??梢援a(chǎn)生信號(hào)。會(huì)引發(fā)硬件異常的情況如除以0,非法內(nèi)存引用(invalid memory reference)等。這種情況會(huì)被硬件檢測(cè)到,并通知內(nèi)核,然后內(nèi)核產(chǎn)生相應(yīng)的信號(hào)通知對(duì)應(yīng)的運(yùn)行進(jìn)程。例如,當(dāng)一個(gè)進(jìn)程執(zhí)行了一個(gè)非法的內(nèi)存引用,會(huì)觸發(fā)SIGSEGV信號(hào)。?
  • kill函數(shù)允許當(dāng)前進(jìn)程向其他的進(jìn)程或者進(jìn)程組發(fā)送任意的信號(hào)。當(dāng)然,這種方法存在限制:我們必須是信號(hào)接收進(jìn)程的所有者,或者我們必須是超級(jí)用戶(superuser)。
  • kill命令的作用和kill函數(shù)類似。這個(gè)命令多用戶殺死后臺(tái)進(jìn)程。
  • 軟件異??梢愿鶕?jù)不同的條件產(chǎn)生不同的信號(hào)。例如:網(wǎng)絡(luò)連接中接受的數(shù)據(jù)超出邊界時(shí),會(huì)觸發(fā)SIGURG信號(hào)。

對(duì)于進(jìn)程來說,信號(hào)是隨機(jī)產(chǎn)生的,所以進(jìn)程不能簡(jiǎn)單地根據(jù)檢測(cè)某個(gè)變量是否改變來判斷信號(hào)是否發(fā)生,而應(yīng)該告訴內(nèi)核“當(dāng)這個(gè)信號(hào)發(fā)生時(shí),做下面的這些事情”。

我們告訴內(nèi)核當(dāng)某個(gè)信號(hào)發(fā)生時(shí)做的事情叫做信號(hào)處理函數(shù)。信號(hào)處理函數(shù)有三種功能可供選擇:

?

  • 忽略該信號(hào)。該行為適用于大部分的信號(hào),除了兩個(gè)信號(hào)不能被忽略:SIGKILL和SIGSTOP。這兩個(gè)信號(hào)無能被忽略,是因?yàn)槠渥饔檬菫閮?nèi)核和超級(jí)用戶提供了一種殺死或者暫停進(jìn)程的萬無一失的方法(a surefire way)。
  • 捕獲該信號(hào)。當(dāng)某個(gè)信號(hào)發(fā)生時(shí),我們告訴進(jìn)程去執(zhí)行我們的一段程序。在該程序中,我們可以做任何操作來處理該種情況。兩個(gè)信號(hào)SIGKILL和SIGSTOP不可以被捕獲。
  • 執(zhí)行默認(rèn)的信號(hào)處理程序。每個(gè)信號(hào)都有一個(gè)默認(rèn)的處理程序,而大部分的信號(hào)默認(rèn)處理程序都是終止該進(jìn)程。

對(duì)于一些信號(hào)發(fā)生時(shí),會(huì)造成進(jìn)程終止,同時(shí)生成一個(gè)core文件,該core文件記錄了該進(jìn)程終止時(shí)的內(nèi)存情況,可以幫助調(diào)試和調(diào)查進(jìn)程的終止?fàn)顟B(tài)。

有幾種情況不會(huì)生成core文件:

  • 如果進(jìn)程設(shè)置了suid位(chmod u+s file),并且當(dāng)前用戶不是程序文件的所有者;
  • 如果進(jìn)程設(shè)置了guid位(set-group-ID),并且當(dāng)前用戶不是程序文件的組所有者;
  • 如果過戶沒有當(dāng)前工作目錄的寫權(quán)限;
  • 如果core文件已經(jīng)存在,并且用戶沒有該文件的寫權(quán)限;
  • 該core文件太大(由參數(shù)RLIMIT_CORE限制)?
2 signal函數(shù)

函數(shù)聲明

#include <signal.h>

void (*signal(int signo, void (*func)(int)))(int);

? ? Returns: PRevious disposition of signal if OK, SIG_ERR on err.

?函數(shù)聲明解析:

void ? (*signal(int ? signr, ? void ? (*handler)(int)))(int);?================================================?handler是一個(gè)函數(shù)指針,指向參數(shù)為單參數(shù)int,返回類型void的函數(shù)?signal是一個(gè)函數(shù)指針、這個(gè)函數(shù)指針指向一個(gè)參數(shù)為一個(gè)int型和一個(gè)handler型的指針、返回值是一個(gè)指向參數(shù)為int、返回值是void的函數(shù)的指針的指針。

總結(jié)一下:?? ? 這個(gè)復(fù)雜的聲明可以用下面2種比較簡(jiǎn)單的型式表達(dá)出來,如下:?第一種型式如下: ? ??typedef ? void ? (*handler_pt)(int);?handler_pt ? signal1(int ? signum,handler_pt ? ahandler);?第二種型式如下:?typedef ? void ? handler_t(int);?handler_t* ? signal2(int ? signum, ? handler_t* ? ahandler);?------------------------------------------------------?以上這兩種形式結(jié)果是等價(jià)的,但也有區(qū)別,第一種形式定義的是函數(shù)指針類型,?sizeof(handler_pt)=4//borland ? c++ ? 5.6.4 ? for ? win ? 32,windos ? xp ? 32 ? platform?第二種形式定義的是函數(shù)類型,如果對(duì)他使用sizeof(handler_t)會(huì)提示:?sizeof ? may ? not ? be ? applied ? to ? a ? function

參數(shù)說明:

  • signo:信號(hào)名
  • func:三種取值選擇:常量SIG_IGN,常量SIG_DFL,或信號(hào)處理函數(shù)的地址。如果func的取值為SIG_IGN,則信號(hào)發(fā)生時(shí)忽略處理(除了兩個(gè)信號(hào)SIGKILL和SIGSTOP)。如果func的取值為SIG_DFL,則調(diào)用信號(hào)的默認(rèn)處理函數(shù)。

在上面的聲明解析中我們可以看到,使用typedef可以簡(jiǎn)化signal函數(shù)的聲明,后面對(duì)signal函數(shù)的調(diào)用也將使用簡(jiǎn)化后的聲明:

typedef void Sigfunc(int);

Sigfunc *signal(int, Sigfunc *);

?

?Example

該例子的作用是捕獲兩個(gè)用戶自定義的信號(hào),并打印相關(guān)的信號(hào)信息。

使用函數(shù)pause來使程序掛起,知道接收到信號(hào)。

Code

#include "apue.h"

?

staticvoid sig_usr(int); ? /* one handler for both signals */

?? ? ? ? ?

int ? ? ?

main(void)

{ ? ? ? ?

? ? if (signal(SIGUSR1, sig_usr) == SIG_ERR)

? ? ? ? err_sys("can't catch SIGUSR1");

? ? if (signal(SIGUSR2, sig_usr) == SIG_ERR)

? ? ? ? err_sys("can't catch SIGUSR2");

? ? for ( ; ; )

? ? ? ? pause();

}? ?

?? ?

staticvoid

sig_usr(int signo)? ? ? /* argument is signal number */

{? ?

? ? if (signo == SIGUSR1)

? ? ? ? printf("received SIGUSR1/n");

? ? else if (signo == SIGUSR2)

? ? ? ? printf("received SIGUSR2/n");

? ??else

? ? ? ??err_dump("received signal %d/n", signo);

}

執(zhí)行結(jié)果:

NewImage

執(zhí)行時(shí),我們先讓該程序后臺(tái)執(zhí)行,然后調(diào)用kill命令向該進(jìn)程發(fā)送信號(hào)。

kill并不真的會(huì)殺死進(jìn)程,而只是發(fā)送信號(hào)。所以kill并不是很準(zhǔn)確的描述了該命令的作用。

當(dāng)我們調(diào)用kill 2081命令時(shí),進(jìn)程被終止,因?yàn)樵谛盘?hào)處理函數(shù)中并沒有處理該信號(hào),而該信號(hào)的默認(rèn)處理程序?yàn)榻K止進(jìn)程。

?

程序啟動(dòng)態(tài)

程序執(zhí)行時(shí),所有信號(hào)的狀態(tài)都為默認(rèn)值或者被忽略。

如果程序調(diào)用了exec系函數(shù),則會(huì)改變信號(hào)的自定義處理函數(shù)為它的默認(rèn)處理程序,因?yàn)樵谠瓉淼某绦蛑械奶幚砗瘮?shù)地址對(duì)于新的程序來說是沒有意義的。

例如,在一個(gè)交互式的shell中,啟動(dòng)一個(gè)后臺(tái)進(jìn)程,會(huì)設(shè)置該進(jìn)程的中斷和退出信號(hào)的處理動(dòng)作為忽略,這樣,當(dāng)用戶在shell中鍵入中斷命令時(shí),只會(huì)中斷前臺(tái)進(jìn)程,而不會(huì)影響后臺(tái)進(jìn)程。

這個(gè)例子也告訴我們了signal函數(shù)的一個(gè)限制:我們無法確認(rèn)當(dāng)前進(jìn)程的一些信號(hào)的處理動(dòng)作,除非我們現(xiàn)在改變它們。后面我們將學(xué)習(xí)sigaction函數(shù)來確認(rèn)一個(gè)信號(hào)的處理動(dòng)作,而不需要改變它們。

?

程序創(chuàng)建

當(dāng)調(diào)用fork函數(shù)時(shí),子進(jìn)程繼承了父進(jìn)程的信號(hào)處理函數(shù)。因?yàn)樽舆M(jìn)程拷貝了父進(jìn)程的內(nèi)存,所以信號(hào)處理函數(shù)的地址對(duì)于子進(jìn)程來說也是有意義的。

?

3 不可靠的信號(hào)(Unreliable Signals)

在早期的Unix系統(tǒng)中,信號(hào)是不可靠的。

不可靠的意思是,信號(hào)是有可能丟失的。即信號(hào)發(fā)生了,但是進(jìn)程沒有捕獲它。

我們希望內(nèi)核可以記住信號(hào),當(dāng)我們r(jià)eady時(shí),告訴我們?cè)撔盘?hào)發(fā)生,讓我們?nèi)ヌ幚怼?/p>

早期的系統(tǒng),對(duì)于信號(hào)機(jī)制的實(shí)現(xiàn)還有一個(gè)問題:當(dāng)信號(hào)發(fā)生,執(zhí)行了信號(hào)處理函數(shù),該信號(hào)的處理函數(shù)就被置為默認(rèn)的信號(hào)處理程序。因此,早期的關(guān)于信號(hào)的程序框架如下所示:

NewImage

這段代碼的問題在于,在SIGINT信號(hào)發(fā)生后,且在對(duì)它的信號(hào)處理函數(shù)重置為sig_int前,有一個(gè)時(shí)間差,在這個(gè)時(shí)間差內(nèi),可能再發(fā)生一次SIGINT信號(hào)。

如果第二次SIGINT發(fā)生在信號(hào)處理函數(shù)重置前,則會(huì)執(zhí)行它的默認(rèn)處理動(dòng)作,即終止進(jìn)程。

早期實(shí)現(xiàn)還有一個(gè)問題,就是如果進(jìn)程不希望某個(gè)信號(hào)發(fā)生,它只能選擇忽略它,而無法將該信號(hào)關(guān)閉。

一種使用場(chǎng)景是:我們不希望被信號(hào)打斷,但是希望記住它們發(fā)生過。代碼可能如下:

NewImage

在這里,我們假設(shè)該信號(hào)只發(fā)生一次。

代碼的目的在于:我們等待信號(hào)發(fā)生,信號(hào)發(fā)生之前,進(jìn)程停止,等待。

代碼的問題在于,有一個(gè)時(shí)間差,可能會(huì)發(fā)生異常情況,如果代碼的執(zhí)行序列如下:

1 信號(hào)發(fā)生

2 while (sig_int_flag == 0)

3 sig_int_flag= 1

4 pause()

這時(shí),進(jìn)程暫停掛起,等待信號(hào)發(fā)生,但是實(shí)際上該信號(hào)已經(jīng)發(fā)生過了。這就導(dǎo)致了信號(hào)沒有被捕獲。

?

4 可中斷系統(tǒng)調(diào)用

早期Unix操作系統(tǒng)的一個(gè)特性是:如果一個(gè)進(jìn)程阻塞在一個(gè)“慢”系統(tǒng)調(diào)用,則該進(jìn)程會(huì)收到一個(gè)信號(hào),導(dǎo)致該進(jìn)程被中斷。該系統(tǒng)調(diào)用返回一個(gè)錯(cuò)誤,并且errno設(shè)置為EINTR。

系統(tǒng)調(diào)用被分為兩類:慢系統(tǒng)調(diào)用和其他系統(tǒng)調(diào)用。慢系統(tǒng)調(diào)用是那些可能永久阻塞的系統(tǒng)調(diào)用。慢系統(tǒng)調(diào)用包括:

  • 讀數(shù)據(jù)函數(shù)可能阻塞調(diào)用者,如果數(shù)據(jù)不是特定的格式;
  • 寫數(shù)據(jù)函數(shù)可能阻塞調(diào)用者,如果數(shù)據(jù)不能按照特定的格式立刻被接收。
  • 按照某種格式打開某個(gè)文件
  • pause函數(shù)和wait函數(shù)
  • 特定的ioctl操作
  • 一些進(jìn)程間通信函數(shù)

對(duì)于可中斷系統(tǒng)調(diào)用,我們需要在代碼中處理errno EINTR:

NewImage

為了避免需要顯式處理可中斷系統(tǒng)調(diào)用,一些可中斷系統(tǒng)調(diào)用在發(fā)生阻塞時(shí)會(huì)自動(dòng)重啟。

這些會(huì)自動(dòng)重啟的可中斷系統(tǒng)調(diào)用包括:ioctl, read, readv, write, writev, wait和waitepid。

如果某些應(yīng)用并不希望這些系統(tǒng)調(diào)用自動(dòng)重啟,可以該系統(tǒng)調(diào)用單獨(dú)設(shè)置SA_RESTART。

?

5 可重入函數(shù)

信號(hào)的發(fā)生導(dǎo)致程序的指令執(zhí)行順序被打亂。

但是在信號(hào)處理函數(shù)中,無法知道原進(jìn)程的執(zhí)行情況。

如果原進(jìn)程這個(gè)在分配內(nèi)存或者釋放內(nèi)存,或者調(diào)用了修改static變量的函數(shù),并在信號(hào)處理函數(shù)中再次調(diào)用該函數(shù),會(huì)發(fā)生不可預(yù)期的結(jié)果。

在信號(hào)處理函數(shù)中可以安全調(diào)用的函數(shù)稱為可重入函數(shù),也叫做異步信號(hào)安全的函數(shù)。除了保證可重入,這些函數(shù)還會(huì)阻塞可能導(dǎo)致結(jié)果不一致的信號(hào)。

如果函數(shù)滿足下面的一種或者幾種條件,則說明是不可重入的函數(shù):

  • 使用static數(shù)據(jù)結(jié)構(gòu)
  • 調(diào)用malloc或free
  • 標(biāo)準(zhǔn)IO庫中的函數(shù),因?yàn)榇蟛糠值臉?biāo)準(zhǔn)IO函數(shù)都使用了全局?jǐn)?shù)據(jù)結(jié)構(gòu)

?

6 SIGCLD語義

一直容易混淆的兩個(gè)信號(hào)是SIGCLD和SIGCHLD。

SIGCLD來自System V,而SIGCHLD來自BSD和POSIX.1。

BSD SIGCHLD的語義:當(dāng)該信號(hào)發(fā)生時(shí),說明子進(jìn)程的狀態(tài)發(fā)生了改變,這時(shí)我們需要調(diào)用wait函數(shù)確認(rèn)狀態(tài)的變化。

對(duì)于System V系統(tǒng)中,對(duì)信號(hào)SIGCLD的處理說明如下:

  1. 如果進(jìn)程設(shè)置信號(hào)SIGCLD的處理動(dòng)作為SIG_IGN,該進(jìn)程的子進(jìn)程將不會(huì)變成僵尸進(jìn)程。這和默認(rèn)的處理動(dòng)作(SIG_DFL)是不同的,雖然默認(rèn)的動(dòng)作也是忽略,但是對(duì)于SIG_IGN,如果隨后調(diào)用了wait函數(shù),調(diào)用進(jìn)程會(huì)阻塞直到所有的子進(jìn)程都終止,wait返回-1,并且設(shè)置errno為ECHILD。默認(rèn)處理動(dòng)作(SIG_DFL)是沒有后面的動(dòng)作的。
  2. 如果我們對(duì)信號(hào)SIGCLD設(shè)置了捕獲,則內(nèi)核會(huì)立刻檢查是否有任何子進(jìn)程被等待,如果有,調(diào)用信號(hào)處理函數(shù)。

?

7 可靠信號(hào)及其語義

?我們先定義幾個(gè)信號(hào)相關(guān)的概念:

  • 信號(hào)產(chǎn)生:如果某一事件導(dǎo)致信號(hào)的發(fā)生,則叫做信號(hào)產(chǎn)生。該事件可能是硬件異常、軟件條件、終端產(chǎn)生的信號(hào)或者kill函數(shù)傳遞的信號(hào)等。當(dāng)信號(hào)產(chǎn)生,內(nèi)核需要在進(jìn)程表中設(shè)置某個(gè)標(biāo)志位。
  • 信號(hào)送達(dá):當(dāng)信號(hào)處理函數(shù)被執(zhí)行,則信號(hào)送達(dá)。
  • 信號(hào)掛起:在信號(hào)產(chǎn)生和送達(dá)之間的時(shí)間叫做信號(hào)掛起。
  • 信號(hào)阻塞:進(jìn)程可以選擇不接收某個(gè)信號(hào)的傳達(dá),叫做阻塞該信號(hào)。如果被阻塞的信號(hào)的處理動(dòng)作為默認(rèn)處理程序或者被捕獲處理,則該信號(hào)會(huì)一直處于掛起狀態(tài),直到進(jìn)程解除對(duì)該信號(hào)的阻塞或者改變?cè)撔盘?hào)的處理動(dòng)作為忽略。系統(tǒng)在信號(hào)傳遞時(shí)決定如何處理被阻塞信號(hào),而不是信號(hào)產(chǎn)生時(shí)。函數(shù)sigpending的作用就是讓進(jìn)程決定哪些信號(hào)被阻塞和掛起。

?可靠機(jī)制,不同的標(biāo)準(zhǔn)對(duì)于異常情況有不同的處理:

  • 如果一個(gè)被阻塞的信號(hào)多次產(chǎn)生,內(nèi)核簡(jiǎn)單地傳遞該信號(hào)一次。
  • 如果多個(gè)信號(hào)等待被傳達(dá),POSIX.1并不關(guān)注信號(hào)的傳達(dá)順序,而The Rationale for POSIX.1標(biāo)準(zhǔn)會(huì)保證和進(jìn)程的當(dāng)前狀態(tài)相關(guān)的信號(hào)先傳達(dá)。
  • 每個(gè)進(jìn)程都有一個(gè)信號(hào)掩碼來決定是否屏蔽某個(gè)信號(hào),信號(hào)掩碼的每一位都對(duì)應(yīng)一個(gè)信號(hào),如果要阻塞某個(gè)信號(hào),則將對(duì)應(yīng)的信號(hào)置為1。
  • 數(shù)據(jù)結(jié)構(gòu)sigset_t被定義用來記錄信號(hào)掩碼(signal mask)

?

?參考資料:

《Advanced Programming in the UNIX Envinronment 3rd》


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
97视频免费在线看| 欧美变态xxxx| 亚洲国产精彩中文乱码av在线播放| 日韩一区二区精品葵司在线| 国产一区二区久久久久| 久久综合图片| 苍井空浴缸大战猛男120分钟| 狠狠人妻久久久久久综合蜜桃| 欧美老熟妇乱大交xxxxx| 欧美日韩三级电影在线| 亚洲精品字幕在线| 欧美激情精品久久久六区热门| 亚洲黄色免费视频| 国产一级大片| 亚洲精品国产精品国自产网站按摩| 国产黄色片免费在线观看| 你懂的网站在线观看网址| 先锋影音网一区二区| 欧美日韩不卡视频| 黄色成人在线网| 依依成人精品视频| 亚洲图片视频小说| 岛国精品视频在线播放| 欧美性色19p| 国产精品入口麻豆免费观看| 欧美激情a∨在线视频播放| 漂亮人妻被黑人久久精品| 香蕉视频国产在线观看| 久久丝袜美腿综合| 欧美亚洲精品天堂| 亚洲小说欧美另类婷婷| 高清国语自产拍免费一区二区三区| 国产精品免费一区二区| 免费国产在线观看| 日韩经典在线观看| 欧美熟妇激情一区二区三区| 国产精品嫩草影院久久久| 亚洲男人第一天堂| 亚洲国产一区二区三区在线播放| 国产精品一区二区性色av| 亚洲自拍偷拍另类| 欧美最猛黑人xxxxwww| 在线日韩日本国产亚洲| 黄色香蕉视频在线观看| 一道本一区二区| 美女在线视频一区| 亚洲一区免费网站| 波多野结衣久久高清免费| 国产伦理在线观看| 午夜精品一区二区三级视频| 漂亮人妻被中出中文字幕| 国产亚洲成精品久久| 国产成人在线视频免费观看| 久久国产精品国产精品| 在线成人免费av| 成年人网站免费看| 国产精品资源站| 中文字字幕码一二三区| 中出嫩模无套| 在线你懂的视频| 电影一区二区在线观看| 日韩成人网免费视频| 国产又粗又猛又爽又黄91精品| 中文字幕亚洲日本| av中文在线资源| 色婷婷av一区二区三区丝袜美腿| 我想看黄色大片| 91福利社在线观看| 日韩成人一区二区三区在线观看| 韩国三级av在线免费观看| 蜜臀av粉嫩av懂色av| 国内自拍在线观看| 美女高潮久久久| 日本全棵写真视频在线观看| 欧美黄色激情| 九色福利视频| 女同另类激情重口| 日韩精品aaa| 蜜桃视频在线观看免费视频| 欧美成人一级| 国产视频在线一区二区| 精品国内亚洲2022精品成人| 午夜视频在线看| www99xav| 国产爆初菊在线观看免费视频网站| 欧美精品久久久久久久久| 精品国产一区二区三区四区在线观看| 亚洲九九精品| 久久精品国产亚洲av高清色欲| 色99之美女主播在线视频| 国产乱码精品一区二三区蜜臂| 99久久综合狠狠综合久久aⅴ| 欧洲亚洲妇女av| 欧美成人女星排名| 又黄又骚的视频| www.8ⅹ8ⅹ羞羞漫画在线看| 精品日韩一区二区三区| 国产亚洲精品91在线| 久久免费视频1| 在线播放国产视频| 精品视频在线免费看| 国产精品电影在线观看| 日本中文字幕一区二区有限公司| 亚洲精品一区视频| 免费av手机在线观看| 欧美久久久久免费| 二区三区在线观看| 国产在线精选视频| 国产aⅴ爽av久久久久| 国产精品一区二区黑丝| 欧美特黄aaa| 欧美日韩精品免费观看视欧美高清免费大片| 久久人体av| 成年人网站av| 久久丫精品久久丫| 欧美自拍偷拍一区| 亚洲一区二区三区久久| 国产精品国产亚洲精品看不卡| 免费裸体美女网站| 777777777亚洲妇女| 亚洲综合av网| av网站无病毒在线| 国产精品电影一区| xxxxx成人.com| 国产精品久久7| 亚洲成人久久影院| 久久香蕉国产| 国产精品久久久久免费a∨大胸| 亚洲欧美日韩网| 首页国产欧美日韩丝袜| 在线中文字幕一区| 美女扒开腿让男人桶爽久久软| 波多野结衣久久精品| 卡一精品卡二卡三网站乱码| 久久这里只有精品9| 亚洲最大免费| 中文字幕在线观看| 日本一区二区三区高清不卡| 亚洲日本乱码在线观看| 欧美va亚洲va国产综合| 在线观看污视频| 日韩久久久久久久| blacked蜜桃精品一区| 久久久精品日韩欧美| 国产精品久久久久久久午夜| 石原莉奈一区二区三区在线观看| www.狠狠| 成年美女网站| 欧美精品123区| av黄色在线免费观看| 国产一区二区精品久| 噜噜噜噜噜在线视频| 欧美老女人xx| 色吧影院999| 美女在线观看视频一区二区| 激情小说一区| 一区二区三区在线观看动漫| 黑人一级大毛片| 欧美一级视频在线播放| 视频区小说区图片区| 日韩美女一区二区三区四区| 免费av不卡在线观看| 2024亚洲男人天堂| 91玉足脚交嫩脚丫在线播放| 久久久久亚洲av无码麻豆| 天天夜碰日日摸日日澡性色av| 欧美日产在线观看| 一级黄色片免费| 日韩中文欧美在线| 亚洲精品不卡在线| 欧美成人三区| 国产伦精品一区二区三区免费迷| 国产精品va在线播放我和闺蜜| 成人av在线亚洲| 成人1区2区3区| 又色又爽又高潮免费视频国产| 国产精品免费观看久久| 欧美日韩久久久一区| 一级黄色免费在线观看| 黄色在线观看av| 欧美一区二区黄| 在线免费观看一级片| 精品国产亚洲日本| 日韩免费视频在线观看| 日韩电影免费观看高清完整版| 国产aaa一级片| 国产电影一区二区三区爱妃记| 丁香亚洲综合激情啪啪综合| 成人午夜淫片100集| 国产亚洲精品女人久久久久久| 在线观看国产精品入口| 成人三级av在线| 自拍偷拍第9页| 欧美激情第6页| 日韩精品首页| 一区二区三区在线观看免费视频| 老司机亚洲精品一区二区| 日本a√在线观看| 亚洲一区二区欧美日韩| 奇米影视第四色7777| 偷偷色噜狠狠狠狠的777米奇| 亚洲图区一区| av有声小说一区二区三区| 国产精品露脸视频| 日韩av一区二区在线观看| 91看片在线观看| 久久性爱视频网站| 欧美激情中文字幕| 香蕉av一区二区三区| 亚洲精品国偷自产在线99热| 9a蜜桃久久久久久免费| 国产亚洲精品久久久久久青梅| 污污影院在线观看| 国产中文字幕一区| 天天躁日日躁成人字幕aⅴ| 粉嫩一区二区三区国产精品| 成人免费在线电影| 天海翼视频在线观看| 手机在线免费看毛片| 情侣偷拍对白清晰饥渴难耐| 99久久99久久免费精品小说| 亚洲综合在线视频| 久久青青视频| 黄色一级片播放| 日韩精品在线中文字幕| 欧美日韩中文字幕综合视频| 先锋影音成人资源| 精品无码一区二区三区在线| 国产成人免费视频app| 亚洲永久视频| 自拍偷拍免费精品| 91精品国产色综合久久不卡98口| 亚洲精品99久久久久| 免费在线亚洲| 亚洲911精品成人18网站| 成人性片免费| 欧美女人性生活视频| 欧美在线不卡一区| 中文字幕乱码人妻综合二区三区| 成人51免费| 成人全视频免费观看在线看| 91精品国产91久久综合| 国产精品chinese| 久久久91精品国产一区二区精品| 国产精品美女久久久久| 欧美一区免费视频| 97国产真实伦对白精彩视频8| 99九九电视剧免费观看| 国产污视频在线播放| 国产黄色高清在线| 中文字幕人妻熟女人妻a片| 韩国18福利视频免费观看| 韩国福利在线| 国产福利电影网| 亚洲色图18p| 国产又大又粗又爽的毛片| 精品www久久久久奶水| 日本一本高清视频| 91精品国产精品| 69av视频在线播放| 国产又黄又粗又猛又爽的视频| 国产精品夜夜夜爽张柏芝| 人妻少妇无码精品视频区| 一区二区三区精| 成人高清免费在线| 亚洲日本中文字幕| 黄瓜视频免费观看在线观看www| 8x8x华人在线| 久久久五月婷婷| 欧美独立站高清久久| 亚洲an天堂an在线观看| 日韩视频免费看| 国产一区二区三区成人欧美日韩在线观看| 伊人久久大香线蕉av不卡| 午夜久久久久久久久久| 日韩av电影中文字幕| 韩国精品主播一区二区在线观看| 亚洲成av人电影| av大片免费在线观看| 天天操天天干天天做| 成人毛片免费在线观看| 欧美高潮视频| 99精品视频网站| 在线一区二区不卡| 日韩在线短视频| 中文字幕一区二区精品| 欧美系列一区| 狠狠人妻久久久久久| 国产精品剧情一区二区在线观看| 最近中文字幕2019第二页视频| 激情欧美一区二区三区黑长吊| 伊人久久成人| 国产高清一级毛片在线不卡| 在线观看天堂| 久久亚洲在线| 中文字幕久久精品| 成人免费一级视频| 国产精品夜夜夜爽阿娇| 日韩精品乱码久久久久久| 26uuu成人| 日韩加勒比系列| 久久国产剧场电影| 色悠久久久久综合欧美99| 欧美国产视频日韩| 黄页视频在线观看| 亚洲成人精品一区| 人妻av中文系列| 中国黄色a级片| 国产免费大片| 久久黄色影视| 国产伦理一区二区三区| 欧产日产国产69| 男人的天堂最新网址| 中国老熟女重囗味hdxx| 麻豆亚洲av熟女国产一区二| 午夜影院日韩| 亚洲黄色小说网站| 日本不卡一区二区三区视频| 少女频道在线观看免费播放电视剧| 亚洲成人精品一区| 99亚洲视频| 91中文在线观看| 色婷婷一区二区三区四区| 一本一道久久a久久精品| а√资源新版在线天堂| 一色屋成人免费精品网站| 日韩一区和二区| 午夜3点看的视频|