亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? namei.c.bak

?? LINUX 0.11版內核代碼。 并有代碼分析說明。
?? BAK
?? 第 1 頁 / 共 3 頁
字號:
/* *  linux/fs/namei.c * *  (C) 1991  Linus Torvalds */#include <set_seg.h>
/* * tytso 作了一些糾正。 */#include <linux/sched.h>// 調度程序頭文件,定義了任務結構task_struct、初始任務0 的數(shù)據(jù),
									// 還有一些有關描述符參數(shù)設置和獲取的嵌入式匯編函數(shù)宏語句。#include <linux/kernel.h>// 內核頭文件。含有一些內核常用函數(shù)的原形定義。#include <asm/segment.h>// 段操作頭文件。定義了有關段寄存器操作的嵌入式匯編函數(shù)。#include <string.h>// 字符串頭文件。主要定義了一些有關字符串操作的嵌入函數(shù)。#include <fcntl.h>// 文件控制頭文件。用于文件及其描述符的操作控制常數(shù)符號的定義。#include <errno.h>// 錯誤號頭文件。包含系統(tǒng)中各種出錯號。(Linus 從minix 中引進的)。#include <const.h>// 常數(shù)符號頭文件。目前僅定義了i 節(jié)點中i_mode 字段的各標志位。#include <sys/stat.h>// 文件狀態(tài)頭文件。含有文件或文件系統(tǒng)狀態(tài)結構stat{}和常量。
// 訪問模式宏。x 是include/fcntl.h 第7 行開始定義的文件訪問標志。
// 根據(jù)x 值索引對應數(shù)值(數(shù)值表示rwx 權限: r, w, rw, wxrwxrwx)(數(shù)值是8 進制)。#define ACC_MODE(x) ("\004\002\006\377"[(x)&O_ACCMODE])/* * 如果想讓文件名長度>NAME_LEN 的字符被截掉,就將下面定義注釋掉。 *//* #define NO_TRUNCATE */#define MAY_EXEC 1		// 可執(zhí)行(可進入)。#define MAY_WRITE 2		// 可寫。#define MAY_READ 4		// 可讀。/* *	permission() * * 該函數(shù)用于檢測一個文件的讀/寫/執(zhí)行權限。我不知道是否只需檢查euid,還是
 * 需要檢查euid 和uid 兩者,不過這很容易修改。 */
//// 檢測文件訪問許可權限。
// 參數(shù):inode - 文件對應的i 節(jié)點;mask - 訪問屬性屏蔽碼。
// 返回:訪問許可返回1,否則返回0。static int permission(struct m_inode * inode,int mask){	int mode = inode->i_mode;// 文件訪問屬性/* 特殊情況:即使是超級用戶(root)也不能讀/寫一個已被刪除的文件 */
// 如果i 節(jié)點有對應的設備,但該i 節(jié)點的連接數(shù)等于0,則返回。	if (inode->i_dev && !inode->i_nlinks)		return 0;
// 否則,如果進程的有效用戶id(euid)與i 節(jié)點的用戶id 相同,則取文件宿主的用戶訪問權限。	else if (current->euid==inode->i_uid)		mode >>= 6;
// 否則,如果進程的有效組id(egid)與i 節(jié)點的組id 相同,則取組用戶的訪問權限。	else if (current->egid==inode->i_gid)		mode >>= 3;
// 如果上面所取的的訪問權限與屏蔽碼相同,或者是超級用戶,則返回1,否則返回0。	if (((mode & mask & 0007) == mask) || suser())		return 1;	return 0;}/* * ok,我們不能使用strncmp 字符串比較函數(shù),因為名稱不在我們的數(shù)據(jù)空間(不在內核空間)。
 * 因而我們只能使用match()。問題不大。match()同樣也處理一些完整的測試。 * * 注意!與strncmp 不同的是match()成功時返回1,失敗時返回0。 */
//// 指定長度字符串比較函數(shù)。
// 參數(shù):len - 比較的字符串長度;name - 文件名指針;de - 目錄項結構。
// 返回:相同返回1,不同返回0。static int match(int len,const char * name,struct dir_entry * de){	register int same; //__asm__("ax")
	char *de_name;
// 如果目錄項指針空,或者目錄項i 節(jié)點等于0,或者要比較的字符串長度超過文件名長度,則返回0。	if (!de || !de->inode || len > NAME_LEN)		return 0;
// 如果要比較的長度len 小于NAME_LEN,但是目錄項中文件名長度超過len,則返回0。	if (len < NAME_LEN && de->name[len])		return 0;
// 下面嵌入?yún)R編語句,在用戶數(shù)據(jù)空間(fs)執(zhí)行字符串的比較操作。
// %0 - eax(比較結果same);%1 - eax(eax 初值0);%2 - esi(名字指針);%3 - edi(目錄項名指針);
// %4 - ecx(比較的字節(jié)長度值len)。/*	__asm__("cld\n\t"				// 清方向位。		"fs ; repe ; cmpsb\n\t"		// 用戶空間執(zhí)行循環(huán)比較[esi++]和[edi++]操作,		"setz %%al"					// 若比較結果一樣(z=0)則設置al=1(same=eax)。		:"=a" (same)		:"0" (0),"S" ((long) name),"D" ((long) de->name),"c" (len)		:"cx","di","si");*/
	de_name = de->name;
	_asm{
		xor eax,eax
		mov esi,name
		mov edi,de_name
		mov ecx,len
		cld		// 清方向位。
		repe cmpsb	// 用戶空間執(zhí)行循環(huán)比較[esi++]和[edi++]操作,
		setz al			// 若比較結果一樣(z=0)則設置al=1(same=eax)。
		mov same,eax
	}	return same;			// 返回比較結果。}/* *	find_entry() * * 在指定的目錄中尋找一個與名字匹配的目錄項。返回一個含有找到目錄項的高速
 * 緩沖區(qū)以及目錄項本身(作為一個參數(shù)- res_dir)。并不讀目錄項的i 節(jié)點- 如 * 果需要的話需自己操作。 * * '..'目錄項,操作期間也會對幾種特殊情況分別處理- 比如橫越一個偽根目錄以 * 及安裝點。 */
//// 查找指定目錄和文件名的目錄項。
// 參數(shù):dir - 指定目錄i 節(jié)點的指針;name - 文件名;namelen - 文件名長度;
// 返回:高速緩沖區(qū)指針;res_dir - 返回的目錄項結構指針;static struct buffer_head * find_entry(struct m_inode ** dir,	const char * name, int namelen, struct dir_entry ** res_dir){	int entries;	int block,i;	struct buffer_head * bh;	struct dir_entry * de;	struct super_block * sb;
// 如果定義了NO_TRUNCATE,則若文件名長度超過最大長度NAME_LEN,則返回。#ifdef NO_TRUNCATE	if (namelen > NAME_LEN)		return NULL;
//如果沒有定義NO_TRUNCATE,則若文件名長度超過最大長度NAME_LEN,則截短之。#else	if (namelen > NAME_LEN)		namelen = NAME_LEN;#endif
// 計算本目錄中目錄項項數(shù)entries。置空返回目錄項結構指針。	entries = (*dir)->i_size / (sizeof (struct dir_entry));	*res_dir = NULL;
// 如果文件名長度等于0,則返回NULL,退出。	if (!namelen)		return NULL;/* 檢查目錄項'..',因為可能需要對其特別處理 */	if (namelen==2 && get_fs_byte(name)=='.' && get_fs_byte(name+1)=='.') {/* 偽根中的'..'如同一個假'.'(只需改變名字長度) */
// 如果當前進程的根節(jié)點指針即是指定的目錄,則將文件名修改為'.',		if ((*dir) == current->root)			namelen=1;
// 否則如果該目錄的i 節(jié)點號等于ROOT_INO(1)的話,說明是文件系統(tǒng)根節(jié)點。則取文件系統(tǒng)的超級塊。		else if ((*dir)->i_num == ROOT_INO) {/* 在一個安裝點上的'..'將導致目錄交換到安裝到文件系統(tǒng)的目錄i 節(jié)點。
   注意!由于設置了mounted 標志,因而我們能夠取出該新目錄 */			sb=get_super((*dir)->i_dev);
// 如果被安裝到的i 節(jié)點存在,則先釋放原i 節(jié)點,然后對被安裝到的i 節(jié)點進行處理。
// 讓*dir 指向該被安裝到的i 節(jié)點;該i 節(jié)點的引用數(shù)加1。			if (sb->s_imount) {				iput(*dir);				(*dir)=sb->s_imount;				(*dir)->i_count++;			}		}	}
// 如果該i 節(jié)點所指向的第一個直接磁盤塊號為0,則返回NULL,退出。	if (!(block = (*dir)->i_zone[0]))		return NULL;
// 從節(jié)點所在設備讀取指定的目錄項數(shù)據(jù)塊,如果不成功,則返回NULL,退出。	if (!(bh = bread((*dir)->i_dev,block)))		return NULL;
// 在目錄項數(shù)據(jù)塊中搜索匹配指定文件名的目錄項,首先讓de 指向數(shù)據(jù)塊,并在不超過目錄中目錄項數(shù)
// 的條件下,循環(huán)執(zhí)行搜索。	i = 0;	de = (struct dir_entry *) bh->b_data;	while (i < entries) {
// 如果當前目錄項數(shù)據(jù)塊已經(jīng)搜索完,還沒有找到匹配的目錄項,則釋放當前目錄項數(shù)據(jù)塊。		if ((char *)de >= BLOCK_SIZE+bh->b_data) {			brelse(bh);			bh = NULL;
// 在讀入下一目錄項數(shù)據(jù)塊。若這塊為空,則只要還沒有搜索完目錄中的所有目錄項,就跳過該塊,
// 繼續(xù)讀下一目錄項數(shù)據(jù)塊。若該塊不空,就讓de 指向該目錄項數(shù)據(jù)塊,繼續(xù)搜索。			if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) ||			    !(bh = bread((*dir)->i_dev,block))) {				i += DIR_ENTRIES_PER_BLOCK;				continue;			}			de = (struct dir_entry *) bh->b_data;		}
// 如果找到匹配的目錄項的話,則返回該目錄項結構指針和該目錄項數(shù)據(jù)塊指針,退出。		if (match(namelen,name,de)) {			*res_dir = de;			return bh;		}
// 否則繼續(xù)在目錄項數(shù)據(jù)塊中比較下一個目錄項。		de++;		i++;	}
// 若指定目錄中的所有目錄項都搜索完還沒有找到相應的目錄項,則釋放目錄項數(shù)據(jù)塊,返回NULL。	brelse(bh);	return NULL;}/* *	add_entry() *
 * 使用與find_entry()同樣的方法,往指定目錄中添加一文件目錄項。 * 如果失敗則返回NULL。 * * 注意!!'de'(指定目錄項結構指針)的i 節(jié)點部分被設置為0 - 這表示
 * 在調用該函數(shù)和往目錄項中添加信息之間不能睡眠,因為若睡眠那么其它 * 人(進程)可能會已經(jīng)使用了該目錄項。 */
//// 根據(jù)指定的目錄和文件名添加目錄項。
// 參數(shù):dir - 指定目錄的i 節(jié)點;name - 文件名;namelen - 文件名長度;
// 返回:高速緩沖區(qū)指針;res_dir - 返回的目錄項結構指針;static struct buffer_head * add_entry(struct m_inode * dir,	const char * name, int namelen, struct dir_entry ** res_dir){	int block,i;	struct buffer_head * bh;	struct dir_entry * de;	*res_dir = NULL;
// 如果定義了NO_TRUNCATE,則若文件名長度超過最大長度NAME_LEN,則返回。#ifdef NO_TRUNCATE	if (namelen > NAME_LEN)		return NULL;
//如果沒有定義NO_TRUNCATE,則若文件名長度超過最大長度NAME_LEN,則截短之。#else	if (namelen > NAME_LEN)		namelen = NAME_LEN;#endif
// 如果文件名長度等于0,則返回NULL,退出。	if (!namelen)		return NULL;
// 如果該目錄i 節(jié)點所指向的第一個直接磁盤塊號為0,則返回NULL 退出。	if (!(block = dir->i_zone[0]))		return NULL;
// 如果讀取該磁盤塊失敗,則返回NULL 并退出。	if (!(bh = bread(dir->i_dev,block)))		return NULL;
// 在目錄項數(shù)據(jù)塊中循環(huán)查找最后未使用的目錄項。首先讓目錄項結構指針de 指向高速緩沖的數(shù)據(jù)塊
// 開始處,也即第一個目錄項。	i = 0;	de = (struct dir_entry *) bh->b_data;	while (1) {
// 如果當前判別的目錄項已經(jīng)超出當前數(shù)據(jù)塊,則釋放該數(shù)據(jù)塊,重新申請一塊磁盤塊block。如果
// 申請失敗,則返回NULL,退出。		if ((char *)de >= BLOCK_SIZE+bh->b_data) {			brelse(bh);			bh = NULL;			block = create_block(dir,i/DIR_ENTRIES_PER_BLOCK);			if (!block)				return NULL;
// 如果讀取磁盤塊返回的指針為空,則跳過該塊繼續(xù)。			if (!(bh = bread(dir->i_dev,block))) {				i += DIR_ENTRIES_PER_BLOCK;				continue;			}
// 否則,讓目錄項結構指針de 志向該塊的高速緩沖數(shù)據(jù)塊開始處。			de = (struct dir_entry *) bh->b_data;		}
// 如果當前所操作的目錄項序號i*目錄結構大小已經(jīng)超過了該目錄所指出的大小i_size,則說明該第i
// 個目錄項還未使用,我們可以使用它。于是對該目錄項進行設置(置該目錄項的i 節(jié)點指針為空)。并
// 更新該目錄的長度值(加上一個目錄項的長度,設置目錄的i 節(jié)點已修改標志,再更新該目錄的改變時
// 間為當前時間。		if (i*sizeof(struct dir_entry) >= dir->i_size) {			de->inode=0;			dir->i_size = (i+1)*sizeof(struct dir_entry);			dir->i_dirt = 1;			dir->i_ctime = CURRENT_TIME;		}
// 若該目錄項的i 節(jié)點為空,則表示找到一個還未使用的目錄項。于是更新目錄的修改時間為當前時間。
// 并從用戶數(shù)據(jù)區(qū)復制文件名到該目錄項的文件名字段,置相應的高速緩沖塊已修改標志。返回該目錄
// 項的指針以及該高速緩沖區(qū)的指針,退出。		if (!de->inode) {			dir->i_mtime = CURRENT_TIME;			for (i=0; i < NAME_LEN ; i++)				de->name[i]=(i<namelen)?get_fs_byte(name+i):0;			bh->b_dirt = 1;			*res_dir = de;			return bh;		}
// 如果該目錄項已經(jīng)被使用,則繼續(xù)檢測下一個目錄項。		de++;		i++;	}
// 執(zhí)行不到這里。也許Linus 在寫這段代碼時是先復制了上面find_entry()的代碼,而后修改的:)	brelse(bh);	return NULL;}/* *	get_dir() * * 該函數(shù)根據(jù)給出的路徑名進行搜索,直到達到最頂端的目錄。 * 如果失敗則返回NULL。 */
//// 搜尋指定路徑名的目錄。
// 參數(shù):pathname - 路徑名。
// 返回:目錄的i 節(jié)點指針。失敗時返回NULL。static struct m_inode * get_dir(const char * pathname){	char c;	const char * thisname;	struct m_inode * inode;	struct buffer_head * bh;	int namelen,inr,idev;	struct dir_entry * de;
// 如果進程沒有設定根i 節(jié)點,或者該進程根i 節(jié)點的引用為0,則系統(tǒng)出錯,死機。	if (!current->root || !current->root->i_count)		panic("No root inode");
// 如果進程的當前工作目錄指針為空,或者該當前目錄i 節(jié)點的引用計數(shù)為0,也是系統(tǒng)有問題,死機。	if (!current->pwd || !current->pwd->i_count)		panic("No cwd inode");
// 如果用戶指定的路徑名的第1 個字符是'/',則說明路徑名是絕對路徑名。則從根i 節(jié)點開始操作。	if ((c=get_fs_byte(pathname))=='/') {		inode = current->root;		pathname++;
// 否則若第一個字符是其它字符,則表示給定的是相對路徑名。應從進程的當前工作目錄開始操作。
// 則取進程當前工作目錄的i 節(jié)點。	} else if (c)		inode = current->pwd;
// 否則表示路徑名為空,出錯。返回NULL,退出。	else		return NULL;	/* 空的路徑名是錯誤的 */
// 將取得的i 節(jié)點引用計數(shù)增1。	inode->i_count++;	while (1) {
// 若該i 節(jié)點不是目錄節(jié)點,或者沒有可進入的訪問許可,則釋放該i 節(jié)點,返回NULL,退出。		thisname = pathname;		if (!S_ISDIR(inode->i_mode) || !permission(inode,MAY_EXEC)) {			iput(inode);			return NULL;		}
// 從路徑名開始起搜索檢測字符,直到字符已是結尾符(NULL)或者是'/',此時namelen 正好是當前處理
// 目錄名的長度。如果最后也是一個目錄名,但其后沒有加'/',則不會返回該最后目錄的i 節(jié)點!
// 比如:/var/log/httpd,將只返回log/目錄的i 節(jié)點。		for(namelen=0;(c=get_fs_byte(pathname++))&&(c!='/');namelen++)			/* nothing */ ;
// 若字符是結尾符NULL,則表明已經(jīng)到達指定目錄,則返回該i 節(jié)點指針,退出。		if (!c)			return inode;
// 調用查找指定目錄和文件名的目錄項函數(shù),在當前處理目錄中尋找子目錄項。如果沒有找到,
// 則釋放該i 節(jié)點,并返回NULL,退出。		if (!(bh = find_entry(&inode,thisname,namelen,&de))) {			iput(inode);			return NULL;		}
// 取該子目錄項的i 節(jié)點號inr 和設備號idev,釋放包含該目錄項的高速緩沖塊和該i 節(jié)點。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区极速播放| 欧美精品久久久久久久久老牛影院| 久久综合丝袜日本网| 毛片av一区二区| 久久综合99re88久久爱| 国产成人精品在线看| 国产精品理论在线观看| 91福利资源站| 久热成人在线视频| 国产日韩欧美一区二区三区综合| 成人福利视频在线看| 日韩电影在线观看一区| 久久综合九色综合欧美98| 成人国产精品免费观看动漫| 夜夜夜精品看看| 欧美一区在线视频| 国产99精品视频| 亚洲一区在线免费观看| 欧美成人综合网站| jvid福利写真一区二区三区| 亚洲国产精品一区二区久久| 久久综合色播五月| 91丨九色丨黑人外教| 午夜久久久久久久久久一区二区| 久久综合九色综合欧美亚洲| 色琪琪一区二区三区亚洲区| 美女视频一区二区三区| 国产精品人妖ts系列视频| 欧美午夜在线一二页| 国产精品性做久久久久久| 久久精品国产秦先生| 亚洲色欲色欲www在线观看| 欧美精品日韩综合在线| 成人av在线播放网址| 日本成人在线电影网| 国产精品福利一区| 日韩欧美的一区| 欧美伊人精品成人久久综合97| 精品中文字幕一区二区| 一区二区日韩av| 国产精品视频看| 精品国产一区二区在线观看| 欧美中文字幕不卡| 国产福利91精品| 九九热在线视频观看这里只有精品| 亚洲激情五月婷婷| 中文字幕精品在线不卡| 日韩精品一区二区三区四区| 欧美视频第二页| 色狠狠综合天天综合综合| 欧美日韩精品免费观看视频 | 色婷婷综合久久久| 国产凹凸在线观看一区二区| 蜜臀av国产精品久久久久| 亚洲日本一区二区三区| 久久精品免视看| 精品免费视频.| 日韩一区二区麻豆国产| 精品视频999| 91成人在线精品| 91久久精品一区二区三| 成人午夜av影视| 国产不卡免费视频| 国产盗摄视频一区二区三区| 国产一区免费电影| 国模冰冰炮一区二区| 精品一区二区三区的国产在线播放 | 亚洲国产欧美日韩另类综合| 中文字幕日韩欧美一区二区三区| 国产三级精品在线| 久久久美女艺术照精彩视频福利播放 | 日韩成人av影视| 日韩国产欧美在线视频| 午夜电影网一区| 午夜不卡av免费| 三级欧美在线一区| 丝袜美腿成人在线| 视频一区视频二区在线观看| 性欧美疯狂xxxxbbbb| 日日夜夜精品视频天天综合网| 亚洲成国产人片在线观看| 亚洲国产精品尤物yw在线观看| 午夜精品在线看| 日本vs亚洲vs韩国一区三区 | 一区二区三区在线免费| 一区二区三区美女视频| 亚洲成人免费影院| 午夜精品福利视频网站| 日韩高清不卡一区二区三区| 麻豆成人久久精品二区三区红 | 成人av网站在线| 在线观看亚洲a| 欧美精品第一页| 精品国产91久久久久久久妲己 | 99久久精品国产导航| 99精品视频一区二区| 欧美性受极品xxxx喷水| 欧美一区二区三区啪啪| 久久精品欧美一区二区三区麻豆| 国产精品免费aⅴ片在线观看| 亚洲靠逼com| www.色精品| 欧美天天综合网| 精品免费国产一区二区三区四区| 欧美国产成人精品| 亚洲综合一二区| 久久国产精品区| 91色婷婷久久久久合中文| 欧美色精品天天在线观看视频| 日韩欧美国产系列| 国产精品久久免费看| 婷婷久久综合九色综合绿巨人| 国产一区二区三区国产| 欧美一a一片一级一片| 久久久午夜精品理论片中文字幕| 亚洲精品网站在线观看| 激情五月婷婷综合| 色综合中文字幕国产| 欧美视频三区在线播放| 久久色中文字幕| 午夜亚洲国产au精品一区二区| 国产一区二区三区视频在线播放| 91精品91久久久中77777| 久久久一区二区| 亚洲福利视频三区| 成人黄色av电影| 这里只有精品99re| 亚洲三级在线免费观看| 精品在线你懂的| 欧美午夜宅男影院| 中文一区二区完整视频在线观看| 国产成人精品一区二区三区四区 | 欧美国产精品v| 奇米影视一区二区三区| 色播五月激情综合网| 久久精品免费在线观看| 日日摸夜夜添夜夜添精品视频| 91影院在线免费观看| 精品久久一二三区| 亚洲va国产va欧美va观看| 91视频免费播放| 国产精品婷婷午夜在线观看| 狠狠色综合色综合网络| 制服丝袜成人动漫| 亚洲一区二区视频| 97久久久精品综合88久久| 久久久久国产成人精品亚洲午夜| 男人操女人的视频在线观看欧美| 欧美在线小视频| 亚洲精品五月天| 色悠悠久久综合| 精品亚洲国内自在自线福利| 欧美日韩亚洲另类| 亚洲午夜在线电影| 91国偷自产一区二区开放时间| 日韩一区欧美一区| 成人av综合一区| 中文字幕色av一区二区三区| 成人性生交大合| 国产精品久久久久9999吃药| 高潮精品一区videoshd| 久久精品亚洲一区二区三区浴池 | 久久精品国产网站| 欧美一区二区啪啪| 日韩va欧美va亚洲va久久| 欧美老年两性高潮| 亚洲mv在线观看| 91精品国产福利在线观看| 日韩va欧美va亚洲va久久| 制服丝袜中文字幕一区| 日韩成人一级大片| 欧美xxx久久| 国产精品一区二区三区网站| 亚洲精选一二三| 欧美在线|欧美| 婷婷丁香久久五月婷婷| 日韩丝袜美女视频| 国产综合色产在线精品| 国产日韩欧美亚洲| 色综合久久综合| 亚洲一区二区不卡免费| 3d成人动漫网站| 国产在线不卡一区| 中文字幕电影一区| 色偷偷88欧美精品久久久| 一区二区三区日韩精品视频| 欧美丰满少妇xxxbbb| 韩国精品主播一区二区在线观看 | 风间由美一区二区av101| 中文字幕欧美三区| 在线观看国产日韩| 免费在线视频一区| 国产精品丝袜黑色高跟| 欧美丝袜丝交足nylons图片| 久久精品99久久久| 国产精品久久网站| 欧美日高清视频| 欧美日韩在线观看一区二区| 久久国产欧美日韩精品| 国产精品久久久久久久久久免费看 |