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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? namei.c

?? linux0.11內(nèi)核源代碼,學(xué)習(xí)內(nèi)核入門必看
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	}	inr = de->inode;	dev = dir->i_dev;	brelse(bh);	iput(dir);	if (flag & O_EXCL)		return -EEXIST;	if (!(inode=iget(dev,inr)))		return -EACCES;	if ((S_ISDIR(inode->i_mode) && (flag & O_ACCMODE)) ||	    !permission(inode,ACC_MODE(flag))) {		iput(inode);		return -EPERM;	}	inode->i_atime = CURRENT_TIME;	if (flag & O_TRUNC)		truncate(inode);	*res_inode = inode;	return 0;}int sys_mknod(const char * filename, int mode, int dev){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh;	struct dir_entry * de;		if (!suser())		return -EPERM;	if (!(dir = dir_namei(filename,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (bh) {		brelse(bh);		iput(dir);		return -EEXIST;	}	inode = new_inode(dir->i_dev);	if (!inode) {		iput(dir);		return -ENOSPC;	}	inode->i_mode = mode;	if (S_ISBLK(mode) || S_ISCHR(mode))		inode->i_zone[0] = dev;	inode->i_mtime = inode->i_atime = CURRENT_TIME;	inode->i_dirt = 1;	bh = add_entry(dir,basename,namelen,&de);	if (!bh) {		iput(dir);		inode->i_nlinks=0;		iput(inode);		return -ENOSPC;	}	de->inode = inode->i_num;	bh->b_dirt = 1;	iput(dir);	iput(inode);	brelse(bh);	return 0;}int sys_mkdir(const char * pathname, int mode){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh, *dir_block;	struct dir_entry * de;	if (!suser())		return -EPERM;	if (!(dir = dir_namei(pathname,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (bh) {		brelse(bh);		iput(dir);		return -EEXIST;	}	inode = new_inode(dir->i_dev);	if (!inode) {		iput(dir);		return -ENOSPC;	}	inode->i_size = 32;	inode->i_dirt = 1;	inode->i_mtime = inode->i_atime = CURRENT_TIME;	if (!(inode->i_zone[0]=new_block(inode->i_dev))) {		iput(dir);		inode->i_nlinks--;		iput(inode);		return -ENOSPC;	}	inode->i_dirt = 1;	if (!(dir_block=bread(inode->i_dev,inode->i_zone[0]))) {		iput(dir);		free_block(inode->i_dev,inode->i_zone[0]);		inode->i_nlinks--;		iput(inode);		return -ERROR;	}	de = (struct dir_entry *) dir_block->b_data;	de->inode=inode->i_num;	strcpy(de->name,".");	de++;	de->inode = dir->i_num;	strcpy(de->name,"..");	inode->i_nlinks = 2;	dir_block->b_dirt = 1;	brelse(dir_block);	inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask);	inode->i_dirt = 1;	bh = add_entry(dir,basename,namelen,&de);	if (!bh) {		iput(dir);		free_block(inode->i_dev,inode->i_zone[0]);		inode->i_nlinks=0;		iput(inode);		return -ENOSPC;	}	de->inode = inode->i_num;	bh->b_dirt = 1;	dir->i_nlinks++;	dir->i_dirt = 1;	iput(dir);	iput(inode);	brelse(bh);	return 0;}/* * routine to check that the specified directory is empty (for rmdir) */static int empty_dir(struct m_inode * inode){	int nr,block;	int len;	struct buffer_head * bh;	struct dir_entry * de;	len = inode->i_size / sizeof (struct dir_entry);	if (len<2 || !inode->i_zone[0] ||	    !(bh=bread(inode->i_dev,inode->i_zone[0]))) {	    	printk("warning - bad directory on dev %04x\n",inode->i_dev);		return 0;	}	de = (struct dir_entry *) bh->b_data;	if (de[0].inode != inode->i_num || !de[1].inode || 	    strcmp(".",de[0].name) || strcmp("..",de[1].name)) {	    	printk("warning - bad directory on dev %04x\n",inode->i_dev);		return 0;	}	nr = 2;	de += 2;	while (nr<len) {		if ((void *) de >= (void *) (bh->b_data+BLOCK_SIZE)) {			brelse(bh);			block=bmap(inode,nr/DIR_ENTRIES_PER_BLOCK);			if (!block) {				nr += DIR_ENTRIES_PER_BLOCK;				continue;			}			if (!(bh=bread(inode->i_dev,block)))				return 0;			de = (struct dir_entry *) bh->b_data;		}		if (de->inode) {			brelse(bh);			return 0;		}		de++;		nr++;	}	brelse(bh);	return 1;}int sys_rmdir(const char * name){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh;	struct dir_entry * de;	if (!suser())		return -EPERM;	if (!(dir = dir_namei(name,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (!bh) {		iput(dir);		return -ENOENT;	}	if (!(inode = iget(dir->i_dev, de->inode))) {		iput(dir);		brelse(bh);		return -EPERM;	}	if ((dir->i_mode & S_ISVTX) && current->euid &&	    inode->i_uid != current->euid) {		iput(dir);		iput(inode);		brelse(bh);		return -EPERM;	}	if (inode->i_dev != dir->i_dev || inode->i_count>1) {		iput(dir);		iput(inode);		brelse(bh);		return -EPERM;	}	if (inode == dir) {	/* we may not delete ".", but "../dir" is ok */		iput(inode);		iput(dir);		brelse(bh);		return -EPERM;	}	if (!S_ISDIR(inode->i_mode)) {		iput(inode);		iput(dir);		brelse(bh);		return -ENOTDIR;	}	if (!empty_dir(inode)) {		iput(inode);		iput(dir);		brelse(bh);		return -ENOTEMPTY;	}	if (inode->i_nlinks != 2)		printk("empty directory has nlink!=2 (%d)",inode->i_nlinks);	de->inode = 0;	bh->b_dirt = 1;	brelse(bh);	inode->i_nlinks=0;	inode->i_dirt=1;	dir->i_nlinks--;	dir->i_ctime = dir->i_mtime = CURRENT_TIME;	dir->i_dirt=1;	iput(dir);	iput(inode);	return 0;}int sys_unlink(const char * name){	const char * basename;	int namelen;	struct m_inode * dir, * inode;	struct buffer_head * bh;	struct dir_entry * de;	if (!(dir = dir_namei(name,&namelen,&basename)))		return -ENOENT;	if (!namelen) {		iput(dir);		return -ENOENT;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		return -EPERM;	}	bh = find_entry(&dir,basename,namelen,&de);	if (!bh) {		iput(dir);		return -ENOENT;	}	if (!(inode = iget(dir->i_dev, de->inode))) {		iput(dir);		brelse(bh);		return -ENOENT;	}	if ((dir->i_mode & S_ISVTX) && !suser() &&	    current->euid != inode->i_uid &&	    current->euid != dir->i_uid) {		iput(dir);		iput(inode);		brelse(bh);		return -EPERM;	}	if (S_ISDIR(inode->i_mode)) {		iput(inode);		iput(dir);		brelse(bh);		return -EPERM;	}	if (!inode->i_nlinks) {		printk("Deleting nonexistent file (%04x:%d), %d\n",			inode->i_dev,inode->i_num,inode->i_nlinks);		inode->i_nlinks=1;	}	de->inode = 0;	bh->b_dirt = 1;	brelse(bh);	inode->i_nlinks--;	inode->i_dirt = 1;	inode->i_ctime = CURRENT_TIME;	iput(inode);	iput(dir);	return 0;}int sys_link(const char * oldname, const char * newname){	struct dir_entry * de;	struct m_inode * oldinode, * dir;	struct buffer_head * bh;	const char * basename;	int namelen;	oldinode=namei(oldname);	if (!oldinode)		return -ENOENT;	if (S_ISDIR(oldinode->i_mode)) {		iput(oldinode);		return -EPERM;	}	dir = dir_namei(newname,&namelen,&basename);	if (!dir) {		iput(oldinode);		return -EACCES;	}	if (!namelen) {		iput(oldinode);		iput(dir);		return -EPERM;	}	if (dir->i_dev != oldinode->i_dev) {		iput(dir);		iput(oldinode);		return -EXDEV;	}	if (!permission(dir,MAY_WRITE)) {		iput(dir);		iput(oldinode);		return -EACCES;	}	bh = find_entry(&dir,basename,namelen,&de);	if (bh) {		brelse(bh);		iput(dir);		iput(oldinode);		return -EEXIST;	}	bh = add_entry(dir,basename,namelen,&de);	if (!bh) {		iput(dir);		iput(oldinode);		return -ENOSPC;	}	de->inode = oldinode->i_num;	bh->b_dirt = 1;	brelse(bh);	iput(dir);	oldinode->i_nlinks++;	oldinode->i_ctime = CURRENT_TIME;	oldinode->i_dirt = 1;	iput(oldinode);	return 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久av毛片精品| 欧美日韩午夜影院| 成人免费在线观看入口| 欧美日韩高清在线| 国产高清视频一区| 亚洲国产视频一区二区| 99久久精品免费看国产| 福利电影一区二区| 国产精品羞羞答答xxdd| 国产一区二区视频在线播放| 蜜乳av一区二区| 久久精品亚洲一区二区三区浴池| 日本一区二区不卡视频| 欧美日韩国产三级| 色综合久久88色综合天天免费| 理论电影国产精品| 亚洲主播在线播放| 亚洲日本在线a| 欧美国产一区视频在线观看| 日韩一区二区三区av| 欧美日韩国产一区| 欧美视频一区二区在线观看| caoporm超碰国产精品| 高清不卡一二三区| 成人午夜视频免费看| 国产精品一区专区| 欧洲中文字幕精品| 丝袜脚交一区二区| 精品久久久久久亚洲综合网| 色94色欧美sute亚洲线路二 | 欧美一区二区三区性视频| 亚洲精品综合在线| 欧美xxxxxxxx| 国产三区在线成人av| 亚洲欧美日韩在线| 亚洲r级在线视频| 免播放器亚洲一区| 国产精品资源网| 成人深夜福利app| 岛国精品一区二区| 91精品一区二区三区久久久久久 | 国产精品 日产精品 欧美精品| 亚洲妇女屁股眼交7| 亚洲国产美国国产综合一区二区| 亚洲一区二区欧美日韩| 国产激情一区二区三区| 91浏览器打开| 国产精品私人自拍| 国产欧美一区二区精品性色超碰| 亚洲超碰97人人做人人爱| 成人国产亚洲欧美成人综合网| 26uuu色噜噜精品一区| 日韩高清在线电影| 国产69精品久久久久777| 色网站国产精品| 久久精品夜夜夜夜久久| 亚洲欧洲日韩综合一区二区| 日韩专区中文字幕一区二区| 日本黄色一区二区| 丁香婷婷综合网| 久久福利资源站| 欧美日韩你懂得| 国产精品家庭影院| 国产麻豆欧美日韩一区| 欧美日韩国产综合视频在线观看| 久久综合九色欧美综合狠狠| 亚洲国产精品一区二区尤物区| 加勒比av一区二区| 5566中文字幕一区二区电影 | 日韩经典中文字幕一区| 在线看国产日韩| 国产69精品久久99不卡| 欧美福利一区二区| 中文字幕在线免费不卡| 久久电影网站中文字幕| 色婷婷精品大在线视频| 久久精品亚洲乱码伦伦中文| 亚洲成人激情综合网| 不卡的看片网站| 欧美精品一区二区三区四区| 亚洲超碰97人人做人人爱| 91在线观看污| 久久精品一区二区三区不卡牛牛| 午夜精品久久久久久不卡8050| 不卡视频一二三四| 久久精品欧美日韩| 看片的网站亚洲| 欧美肥胖老妇做爰| 一区二区三区四区av| av在线一区二区三区| 国产亚洲欧美激情| 麻豆精品蜜桃视频网站| 欧美日本在线视频| 亚洲一区二区欧美激情| 日本乱码高清不卡字幕| 成人欧美一区二区三区在线播放| 国产精品影音先锋| 精品福利在线导航| 久久国产精品色| 欧美一区二区日韩一区二区| 午夜在线成人av| 欧美日韩精品一区二区天天拍小说| 亚洲视频香蕉人妖| 91欧美激情一区二区三区成人| 国产精品你懂的在线欣赏| 成人午夜私人影院| 中文字幕在线观看一区二区| 成人app下载| 中文字幕一区二区三区精华液 | 日韩一区二区三区在线视频| 亚洲aaa精品| 欧美精品一二三| 天堂一区二区在线免费观看| 在线不卡欧美精品一区二区三区| 亚洲一区二区三区在线播放| 99久久久久久99| 成人av在线看| 国产麻豆视频一区二区| 蜜桃视频一区二区三区| 一区二区三区精品视频| 久久免费精品国产久精品久久久久| 91在线观看污| 国产成人精品影院| 日韩成人一区二区三区在线观看| 国产精品久久久久久福利一牛影视| 欧美在线视频全部完| 国产精品久久99| 久久精品免费在线观看| 国产精品人成在线观看免费| 成人毛片视频在线观看| 国产精品女同互慰在线看| 91久久精品午夜一区二区| 亚洲另类在线一区| 欧美视频你懂的| 无吗不卡中文字幕| 精品久久久久av影院| 国产一区二区三区电影在线观看| 欧美激情一区三区| 99精品视频一区| 亚洲bt欧美bt精品777| 6080午夜不卡| 国产精品1区2区3区在线观看| 久久综合色播五月| aaa亚洲精品| 国产精品人人做人人爽人人添| 91日韩在线专区| 日韩av电影免费观看高清完整版 | 国产一区二区三区美女| 国产精品理伦片| 色欧美88888久久久久久影院| 视频一区在线视频| 精品国产第一区二区三区观看体验 | 久久久精品蜜桃| 成人18视频在线播放| 日韩精品电影在线| 久久这里只有精品视频网| 色婷婷av一区| 日韩**一区毛片| 亚洲欧洲成人自拍| 欧美日韩精品一二三区| 国产激情一区二区三区| 亚洲一区二区三区四区五区黄 | 天堂在线亚洲视频| 3d成人动漫网站| 中文字幕一区二区三区在线不卡 | 欧美一级黄色片| 欧美精品在线一区二区三区| 欧美日韩国产小视频| 在线观看av不卡| 精品国产一区二区三区忘忧草| 777色狠狠一区二区三区| 日韩一二三区视频| 精品乱人伦小说| 国产精品理伦片| 中文字幕视频一区| 午夜视频一区二区三区| 日韩一区二区在线观看视频| 99久久精品费精品国产一区二区| 午夜视频一区二区三区| 国产精品看片你懂得| 日韩欧美一级精品久久| 色综合色狠狠天天综合色| 韩国午夜理伦三级不卡影院| 国产精品久久久久久久久久免费看 | 国产不卡免费视频| 日韩电影在线一区二区| 国产精品不卡一区二区三区| 26uuu国产日韩综合| 91麻豆国产在线观看| 成人自拍视频在线| 日韩1区2区日韩1区2区| 亚洲第一二三四区| 日韩欧美一级二级三级久久久| 欧美日本一道本| 91久久香蕉国产日韩欧美9色| 国产传媒久久文化传媒| 国产在线视频不卡二| 日韩国产欧美在线视频| 亚洲成人综合网站| 亚洲人一二三区|