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

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

UNIX高級環(huán)境編程(10)進(jìn)程控制(Process Control)- 競態(tài)條件,exec函數(shù),解釋器文件和system函數(shù)

2024-06-28 13:21:27
字體:
供稿:網(wǎng)友
UNIX高級環(huán)境編程(10)進(jìn)程控制(PRocess Control)- 競態(tài)條件,exec函數(shù),解釋器文件和system函數(shù)

本篇主要介紹一下幾個內(nèi)容:

  • 競態(tài)條件(race condition)
  • exec系函數(shù)
  • 解釋器文件?

?

1 競態(tài)條件(Race Condition)

競態(tài)條件:當(dāng)多個進(jìn)程共同操作一個數(shù)據(jù),并且結(jié)果依賴于各個進(jìn)程的操作順序時,就會發(fā)生競態(tài)條件。

例如fork函數(shù)執(zhí)行后,如果結(jié)果依賴于父子進(jìn)程的執(zhí)行順序,則會發(fā)生競態(tài)條件。

說到fork之后的父子進(jìn)程的執(zhí)行順序,我們可以通過下面的方式指定執(zhí)行順序:

如果父進(jìn)程等待子進(jìn)程結(jié)束,則需要調(diào)用wait函數(shù)。

如果子進(jìn)程等待父進(jìn)程結(jié)束,則需要像下面這樣輪詢:

while (getppid() != 1)

? ? sleep(1);

輪詢的方式的缺點(diǎn)是非常浪費(fèi)CPU時間。

?

如果希望避免競態(tài)條件和輪詢,則需要用到進(jìn)程之間的信號機(jī)制,或者其他的ipC方式。

競態(tài)條件的例子:

Example:

#include "apue.h"

?

static void charatatime(char *);

?

int

main(void)

{

? ? pid_t ? pid;

?

? ? if ((pid = fork()) < 0) {

? ? ? ? err_sys("fork error");

? ? } else if (pid == 0) {

? ? ? ? charatatime("output from child/n");

? ? } else {

? ? ? ? charatatime("output from parent/n");

? ? }

? ? exit(0);

}

?

staticvoid

charatatime(char *str)

{

? ? char? ? *ptr;

? ??int ? ? c;

?

? ? setbuf(stdout, NULL); ? ? ? ? ? /* set unbuffered */

? ? for (ptr = str; (c = *ptr++) != 0; )

? ? ? ? putc(c, stdout);

}

輸出結(jié)果:

NewImage

我們可以發(fā)現(xiàn),輸出結(jié)果并不一定,依賴于父子進(jìn)程的執(zhí)行順序,這里就發(fā)生了競態(tài)條件。

在例子中,我們設(shè)置了stdout得buffer為NULL,為了讓每一個字符的輸出都調(diào)用write,這樣可以盡可能多地發(fā)生進(jìn)程間切換。

在下面的例子中,我們通過在父子進(jìn)程間進(jìn)行通信,來保證父進(jìn)程先運(yùn)行。

Example:

#include "apue.h"

?

static void charatatime(char *);

?

int

main(void)

{

? ? pid_t ? pid;

?

? ? TELL_WAIT();

?

? ? if ((pid = fork()) < 0) {

? ? ? ? err_sys("fork error");

? ? } else if (pid == 0) {

? ? ? ? WAIT_PARENT();? ? ? /* parent goes first */

? ? ? ? charatatime("output from child/n");

? ? } else {

? ? ? ? charatatime("output from parent/n");

? ? ? ? TELL_CHILD(pid);

? ? }

? ? exit(0);

}

static void

charatatime(char *str)

{

? ? char? ? *ptr;

? ? int ? ? c;

?

? ? setbuf(stdout, NULL); ? ? ? ? ? /* set unbuffered */

? ? for (ptr = str; (c = *ptr++) != 0; )

? ? ? ? putc(c, stdout);

}

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

NewImage

從結(jié)果可以看到,輸出是符合預(yù)期的。

所以進(jìn)程間通信是解決競態(tài)條件的方式之一。

?

2 exec函數(shù)

fork函數(shù)的一個作用就是,創(chuàng)建出一個子進(jìn)程,讓子進(jìn)程執(zhí)行exec函數(shù),去執(zhí)行另一個程序。

exec函數(shù)的作用就是用一個新的程序代替現(xiàn)在的進(jìn)程,從新程序的main函數(shù)開始執(zhí)行。

替換后,進(jìn)程號不改變,被替換的內(nèi)容包括文本段,數(shù)據(jù)段,堆和棧。

exec函數(shù)是一組函數(shù),函數(shù)聲明如下:

NewImage

函數(shù)細(xì)節(jié):

  • 前四個函數(shù)的參數(shù)pathname為文件路徑,后兩個函數(shù)的參數(shù)filename為文件名,最后一個為文件描述符。如果filename中又’/‘號,則認(rèn)為是一個文件路徑,否則函數(shù)以環(huán)境變量為前綴對指定的文件進(jìn)行搜索;
  • 如果execlp和execvp函數(shù)發(fā)現(xiàn)目標(biāo)文件不是可執(zhí)行文件,則會嘗試把它當(dāng)做一個腳本調(diào)用/bin/sh去執(zhí)行;
  • fexecve函數(shù)依賴調(diào)用者去保證文件的可執(zhí)行,并且防止惡意用戶在時間差將目標(biāo)可執(zhí)行文件替換。
  • 函數(shù)名中的l代表list,v代表vector。l系函數(shù)的參數(shù)為命令行中傳入的參數(shù)(在參數(shù)列表中分別由arg0,arg1,arg2...表示),v系函數(shù)則需要將參數(shù)的指針放入一個數(shù)組中,將數(shù)組的地址傳入函數(shù)。
  • 環(huán)境變量列表的傳遞方式。函數(shù)名以e結(jié)尾的函數(shù)允許修改環(huán)境變量列表,函數(shù)的最后一個參數(shù)是一個指向一個指針數(shù)組的指針,數(shù)組中的指針指向環(huán)境變量的各個字符串。

?這7個函數(shù)非常難記,了解函數(shù)名中得特別字母有助于記憶:

  • 字母p代表函數(shù)獲取一個filenam參數(shù)和環(huán)境變量來查找可執(zhí)行文件;
  • 字母l代表函數(shù)獲取一個參數(shù)列表
  • 字母v代表函數(shù)獲取一個argv[]作為參數(shù)
  • 字母e代表函數(shù)獲取一個envp[]作為參數(shù),取代環(huán)境變量列表,用戶可以修改環(huán)境變量然后傳遞給子進(jìn)程

?exec函數(shù)小結(jié):

NewImage

前面提到過,執(zhí)行了exec函數(shù)后,進(jìn)程的進(jìn)程號不變。除了進(jìn)程號,還有繼承而來的信息包括:

NewImage

exec函數(shù)替換程序之后,對于已經(jīng)打開的文件描述符的處理,取決于flag close-on-exec。如果flag close-on-exec被打開,則exec替換程序后,打開的文件描述符會被關(guān)閉,負(fù)責(zé)這些文件描述會保持打開狀態(tài),這種保持打開狀態(tài)的行為也是默認(rèn)行為。

?real user ID和real group ID在exec函數(shù)后保持不變,但是effective user ID和effective group ID可以通過設(shè)置set-user-ID和set-group-ID標(biāo)志位而決定是否改變。

一般實(shí)現(xiàn)時,7個exec函數(shù),只有一個exec函數(shù)會被實(shí)現(xiàn)為系統(tǒng)調(diào)用。

7個exec函數(shù)之間的關(guān)系如圖所示:

NewImage

?

Example:

#include "apue.h"

#include <sys/wait.h>

?

char? ? *env_init[] = { "USER=unknown", "PATH=/tmp", NULL };

?

int

main(void)

{

? ? pid_t ? pid;

?

? ? if ((pid = fork()) < 0) {

? ? ? ? err_sys("fork error");

? ? } elseif (pid == 0) {? /* specify pathname, specify environment */

? ? ? ? if (execle(“/*可執(zhí)行文件所在路徑*//echoall", "echoall", "myarg1",

? ? ? ? ? ? ? ? "MY ARG2", (char *)0, env_init) < 0)

? ? ? ? ? ? err_sys("execle error");

? ? }

?

? ? if (waitpid(pid, NULL, 0) < 0)

? ? ? ? err_sys("wait error");

?

? ? if ((pid = fork()) < 0) {

? ? ? ??err_sys("fork error");

? ? } elseif (pid == 0) {? /* specify filename, inherit environment */

? ? ? ? if (execlp("echoall", "echoall", "only 1 arg", (char *)0) < 0)

? ? ? ? ? ? err_sys("execlp error");

? ? }

?

? ? exit(0);

}

?

3 解釋器文件(Interpreter Files)

所有現(xiàn)代UNIX系統(tǒng)都支持解釋器文件(interpreter files)。

解釋器文件開始一行的格式為:

#!pathname [optional-argument]

?例如,shell腳本的開始一行為:

?#!/bin/sh?

?要區(qū)分清楚解釋器文件和解釋器:

  • 解釋器文件:第一行以#!pathname XXX開始的文本文件
  • 解釋器:解釋器文件第一行#!pathname xxx中指定的xxx可執(zhí)行文件

?需要注意的一點(diǎn)是:解釋器文件的第一行的長度是有限制的,長度計(jì)算包含了空格,’#!’和換行符。

Example:

#include "apue.h"

#include <sys/wait.h>

?

int

main(void)

{

? ? pid_t ? pid;

?

? ? if ((pid = fork()) < 0) {

? ? ? ? err_sys("fork error");

? ? } else if (pid == 0) {? ? ? ? ? /* child */

? ? ? ? if (execl("/home/sar/bin/testinterp",

? ? ? ? ? ? ? ? ? “testinterp", "myarg1", "MY ARG2", (char *)0) < 0)

? ? ? ? ? ? err_sys("execl error");

? ? }

? ? if (waitpid(pid, NULL, 0) < 0)? /* parent */

? ? ? ? err_sys("waitpid error");

? ? exit(0);

}

輸出結(jié)果:

NewImage?

?輸出結(jié)果說明:

  • 程序的作用是輸出命令行中的每一個參數(shù)
  • 需要注意的是,第一個參數(shù)argv[0]是解釋器的據(jù)對路徑
  • 第二個參數(shù)是解釋器文件第一行的可選參數(shù)
  • 第三個參數(shù)是替換程序文件的路徑
  • 需要注意的是,參數(shù)’’testinterp”并沒有被輸出,因?yàn)閮?nèi)核認(rèn)為第一個參數(shù)pathname包含更多的內(nèi)容

?

4 system函數(shù)(system Function)

在程序執(zhí)行一個命令字符串是很方便的。

例如:

system(“date > file");

?將日期重定向至file文件中。

函數(shù)聲明:

#include <stdlib.h>

int system(const char* cmdstring);

?函數(shù)細(xì)節(jié):

  • 如果cmdstring是一個Null指針,則在system函數(shù)可以正常調(diào)用時返回非零值。這個特性可以用來檢查系統(tǒng)是否支持system函數(shù)。
  • 因?yàn)閟ystem函數(shù)是基于fork, exec和waitpid實(shí)現(xiàn),所以system有三種返回值
    • 如果fork失敗或者waitpid返回錯誤并且不是EINTR,system函數(shù)返回-1;
    • 如果exec失敗,表明shell不能被執(zhí)行,返回值和shell退出返回值(127)相同;
    • 如果fork,exec和waitpid都執(zhí)行成功,并且system返回值是shell的終止?fàn)顟B(tài)值,該值的形式由waitpid函數(shù)指定。

?system函數(shù)的一種實(shí)現(xiàn),沒有處理信號的版本。

code

#include? ? <sys/wait.h>

#include? ? <errno.h>

#include? ? <unistd.h>

?

int

system(constchar *cmdstring) ? /* version without signal handling */

{

? ? pid_t ? pid;

? ? int ? ? status;

?

? ? if (cmdstring == NULL)

? ? ? ? return(1);? ? ? /* always a command processor with UNIX */

?

? ? if ((pid = fork()) < 0) {

? ? ? ? status = -1;? ? /* probably out of processes */

? ? } else if (pid == 0) {? ? ? ? ? ? ? /* child */

? ? ? ? execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);

? ? ? ? _exit(127); ? ? /* execl error */

? ? } else {? ? ? ? ? ? ? ? ? ? ? ? ? ? /* parent */

? ? ? ? while (waitpid(pid, &status, 0) < 0) {

? ? ? ? ? ? if (errno != EINTR) {

? ? ? ? ? ? ? ? status = -1; /* error other than EINTR from waitpid() */

? ? ? ? ? ? ? ? break;

? ? ? ? ? ??}

? ? ? ? }

? ? }

?

? ? return(status);

}

?代碼細(xì)節(jié):

  • shell中的-c參數(shù)說明將后面的一個參數(shù)作為命令行輸入,而不是從標(biāo)準(zhǔn)輸入或者指定文件讀??;
  • 我們調(diào)用_exit而不是exit,防止子進(jìn)程退出時,會將從父進(jìn)程拷貝到的buffer打印。

使用system函數(shù)的好處是system函數(shù)為我們處理了所以的異常,并且提供了所有必須的信號處理。

Example

#include "apue.h"

#include <sys/wait.h>

?

int

main(void)

{

? ? int ? ? status;

?

? ? if ((status = system("date")) < 0)

? ? ? ? err_sys("system() error");

?

? ? pr_exit(status);

?

? ? if ((status = system("nosuchcommand")) < 0)

? ? ? ? err_sys("system() error");

?

? ? pr_exit(status);

?

? ? if ((status = system("who; exit 44")) < 0)

? ? ? ? err_sys("system() error");

?

? ? pr_exit(status);

?

? ? exit(0);

}

運(yùn)行結(jié)果:

NewImage

?

?

參考資料:

《Advanced Programming in the UNIX Envinronment 3rd》


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
3d动漫成人在线| 日韩精品――中文字幕| 欧美电影免费看| 91久久国语露脸精品国产高跟| 欧美视频亚洲色图| 亚洲一区美女视频在线观看免费| 亚洲精品国产综合区久久久久久久| 天天干天天操天天干天天操| 国产女主播自拍| 免费观看一级特黄欧美大片| 91小视频在线观看| 久久久久久国产精品一区| 国产在线观看免费视频今夜| 中文字幕精品在线不卡| 亚洲free性xxxx护士白浆| 成人黄色一级视频| 免费在线观看污网站| 精品国产免费人成电影在线观...| 欧美大片在线播放| 欧洲精品99毛片免费高清观看| 6080yy精品一区二区三区| 91视频入口| 欧美另类69精品久久久久9999| 91av在线免费视频| 国产精品后入内射日本在线观看| 色老头一区二区三区| 色综合中文综合网| 激情亚洲影院在线观看| 国产精品美女www爽爽爽| 三上悠亚在线观看二区| 日韩一区二区三区精品视频| 中文字幕乱码人妻二区三区| 巨乳诱惑日韩免费av| 欧美日本视频在线| 欧美精品在线免费播放| 日本在线中文字幕一区二区三区| jizz视频18| 99国产精品免费网站| 国产精品igao视频网网址不卡日韩| 91精品国产美女浴室洗澡无遮挡| 99视频在线观看一区三区| 91免费视频大全| 欧美在线视频免费| 国产永久在线观看| 久久久国产精品一区| 在线日韩中文| 国产精品入口芒果| 天堂网在线.www天堂在线| 夫妇交换中文字幕| 国产wwwwxxxx| 99thz桃花论族在线播放| 美女胸又www又黄的网站| 亚洲天堂久久久久| 日韩和的一区二区| 精品久久久免费视频| 亚洲天堂精品视频| 亚洲人精品一区| 中文一区一区三区高中清不卡| 久久91视频| 中文字幕+乱码+中文| 色综合亚洲图丝熟| 羞羞影院欧美| chinese叫床对白videos| 成人免费观看视频大全| 成人高潮片免费视频| 欧美电影一区二区三区| 欧美午夜片在线免费观看| 日本伦理一区二区三区| 日韩av男人的天堂| 深爱激情久久| av电影在线观看网址| 亚洲资源网你懂的| 成人国产一区二区三区精品| 国产91在线免费| 日韩黄色一级大片| av网站在线观看免费| 国产中文字幕在线| 国产欧美日韩在线观看视频| 亚洲最大综合网| 无套内谢丰满少妇中文字幕| 亚洲伦理精品| 亚洲制服中文| 国产黄a三级三级三级av在线看| 日韩视频一区二区三区在线播放| 亚洲国产精品va在线| 日本一区免费在线观看| 国产96在线 | 亚洲| 国产传媒欧美日韩成人精品大片| 国产农村av| 天使萌一区二区三区免费观看| 91亚洲午夜精品久久久久久| 免费一区二区三区| 日韩情爱电影在线观看| 欧美一区二区三区视频在线观看| 男插女免费视频| 午夜精品久久久久99热蜜桃导演| 国产精品第一国产精品| 五月激情综合婷婷| 日韩综合另类| 日韩电影中文 亚洲精品乱码| 精品一区二区三区久久久| 99久久精品一区| 国产精品无码AV| 日韩免费一区二区三区在线播放| 国产精品无码天天爽视频| 国产婷婷成人久久av免费高清| 久久精品一二三| 天码人妻一区二区三区在线看| 天海翼精品一区二区三区| 亚洲国产精品女人久久久| 黄色91在线观看| 欧美不卡高清一区二区三区| 亚洲国产精品激情在线观看| 老司机精品福利视频| 婷婷精品在线观看| 国产剧情在线观看一区| 成年网站在线视频网站| 成人在线中文字幕| 各处沟厕大尺度偷拍女厕嘘嘘| 黑人巨大精品欧美一区二区一视频| 亚洲一区二区三区在线| 欧美视频自拍偷拍| 欧美黑人又粗大| 欧美视频免费播放| 欧美aaa大片视频一二区| 久久艳妇乳肉豪妇荡乳av| 美日韩黄色片| 成人性生交xxxxx网站| 香蕉免费一区二区三区在线观看| 亚洲同志男男gay1069网站| 免费视频拗女稀缺一区二区| 亚洲欧美一二三| 国产精品秘入口18禁麻豆免会员| 91精品国产91久久久久麻豆 主演| 男女啪啪在线观看| h网站视频在线观看| 中文字幕中文字幕在线中心一区| 99re6在线| 天堂网在线资源| 一区二区三区国产福利| 亚洲an天堂an在线观看| 日本精品一区二区三区不卡无字幕| 国产夫妻性生活视频| 国内揄拍国内精品少妇国语| 91九色丨porny丨肉丝| 精品国产av鲁一鲁一区| 国产精品三级av| 极品粉嫩小仙女高潮喷水久久| 中文字幕资源在线观看| 日本乱人伦一区| 欧美综合一区第一页| 东京一区二区| 777一区二区| 韩国成人在线| 国产精品特级毛片一区二区三区| 久久久久久91香蕉国产| 欧美日韩国产在线一区| 男女性杂交内射妇女bbwxz| 国产精品欧美在线观看| 天天性天天草| sm在线播放| 自拍偷拍校园春色| 一级黄色片在线免费观看| 菠萝菠萝蜜网站| 国产三级伦理在线| 欧美人与物videos另类| 最新福利小视频在线播放| 蜜桃免费网站一区二区三区| 欧美一级黄色网| 日韩人妻一区二区三区| av网站在线不卡| 麻豆专区一区二区三区四区五区| 亚洲欧美日韩国产成人精品影院| 成人午夜在线播放| 国产高清精品一区| 国产精品无码99re| 日韩欧美国产高清| a篇片在线观看网站| 欧美日韩一级黄| 国产伦理吴梦梦伦理| 91在线无精精品一区二区| 午夜精品久久久久久久99热影院| 成年人三级视频| 91成人在线免费观看| 亚洲精品色午夜无码专区日韩| 欧美日韩精品欧美日韩精品一综合| 91在线观看高清| 大桥未久恸哭の女教师| 亚洲午夜精品国产| 午夜啪啪小视频| 亚州欧美色图| www.99色| 欧美激情在线播放| 国产高清成人久久| 97se狠狠狠综合亚洲狠狠| 国产一区二区三区成人欧美日韩在线观看| 国产精品jizz在线观看美国| 98精品国产自产在线观看| 2001个疯子在线观看| 污污的网站在线观看| 国产精品一区二区人人爽| 国产欧美短视频| 在线免费观看电影网站入口| 日本中文字幕一级片| 免费观看亚洲视频| 成人51免费| 国产五月天婷婷| 美女又爽又黄免费动漫| 免费大片在线观看www| 欧美日韩一区 二区 三区 久久精品| 成人在线视频网址| 九色视频成人porny| 夜色资源站国产www在线视频| 麻豆av一区二区三区久久| 国产成人无码aa精品一区| 久久国产麻豆精品| 欧美风情第一页| 日韩av电影免费观看| 在线一区二区日韩| 国产伦精品一区二区三区妓女| 尤物在线观看| 色婷婷久久一区二区三区麻豆| 国产av 一区二区三区| 欧美视频一区二区| 欧亚乱熟女一区二区在线| 亚洲国产天堂av| 欧美高清视频在线| 亚洲一二区在线观看| 国产区精品区| 91亚洲国产成人精品性色| 97视频在线观看播放| 色先锋资源网| 日本日本精品二区免费| 动漫3d精品一区二区三区| 欧美激情一级片一区二区| 成人春色激情网| 一本色道久久加勒比精品| 成年人视频免费| 亚洲国产美女视频| 一区二区三区美女| 日韩欧美一级视频| 曰本色欧美视频在线| 欧美一级特黄高清视频| 日韩欧美电影在线观看| xxxx在线播放| 国产亚洲精品久久久久久豆腐| 全部免费的黄色毛片| 国产精品视频在线播放| 免费观看在线黄色网| 午夜一区二区三区免费| 91丨porny丨国产| 久久国产精品视频| 中文字幕一区二区三区四区视频| 午夜影院韩国伦理在线| 综合久久一本| 中文字幕人妻一区二区在线视频| 艳色歌舞团一区二区三区| 欧美视频中文一区二区三区在线观看| 成人免费在线观看视频网站| 亚洲乱亚洲乱妇无码| 偷拍精品一区二区三区| 国产成人精品一区二区免费视频| 国产网站免费观看| 一区二区三区视频免费看| 你懂的免费在线观看| 91麻豆精品国产综合久久久久久| 性亚洲最疯狂xxxx高清| av日韩在线播放| 99re8这里只有精品| 91福利视频免费观看| 伊人久久一区二区三区| 色香阁99久久精品久久久| 国产女人18毛片18精品| 欧美日韩久久婷婷| 激情综合中文娱乐网| 亚洲最大福利视频网| 手机在线看福利| 日韩av片永久免费网站| 99久精品视频在线观看视频| 色多多视频在线观看| 国产成人精品视频免费| 97人人爽人人澡人人精品| 男人天堂2024| 日本不卡在线| 欧美色老头old∨ideo| 国产福利免费观看| 最近中文字幕免费观看| 波多野结衣与黑人| 亚洲图片制服诱惑| 亚洲综合激情小说| 欧美激情一级片一区二区| 一区二区av在线| 久久久欧美精品sm网站| 亚洲精品黑牛一区二区三区| 深夜福利小视频| 中文字幕免费观看| 精品国产户外野外| 五月天国产在线| 亚洲字幕成人中文在线观看| 欧美夫妇交换xxx| 国产最新精品精品你懂的| 日本三级2019| 日韩人妻无码精品综合区| 国产视频在线观看一区二区三区| 亚洲美女网站| 久久精品成人欧美大片古装| 91视频免费网址| 国产麻豆剧传媒精品国产| 亚洲国产精品久| 欧美精美视频| 日韩伦理精品| 九九九久久久久久久| 国产在线国偷精品产拍免费yy| 欧美色图亚洲天堂| 欧美电影免费观看高清| 青青在线视频一区二区三区| 青青青爽在线视频免费观看| 91精品蜜臀在线一区尤物| 在线日韩国产网站| 国产欧美日本一区视频| 久草av在线播放| 蜜桃特黄a∨片免费观看| 国产欧美va欧美va香蕉在| 狠狠干一区二区| av影片在线一区| 欧美黄片一区二区三区| 欧美视频中文在线看| 精品少妇爆乳无码av无码专区|