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

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

?? file.c

?? 內核是系統的心臟
?? C
字號:
/*
 *  linux/fs/minix/file.c
 *
 *  Copyright (C) 1991, 1992 Linus Torvalds
 *
 *  minix regular file handling primitives
 */

#include <asm/segment.h>
#include <asm/system.h>

#include <linux/sched.h>
#include <linux/minix_fs.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/stat.h>
#include <linux/locks.h>

#define	NBUF	32

#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))

#include <linux/fs.h>
#include <linux/minix_fs.h>

static int minix_file_read(struct inode *, struct file *, char *, int);
static int minix_file_write(struct inode *, struct file *, char *, int);

/*
 * We have mostly NULL's here: the current defaults are ok for
 * the minix filesystem.
 */
static struct file_operations minix_file_operations = {
	NULL,			/* lseek - default */
	minix_file_read,	/* read */
	minix_file_write,	/* write */
	NULL,			/* readdir - bad */
	NULL,			/* select - default */
	NULL,			/* ioctl - default */
	generic_mmap,  		/* mmap */
	NULL,			/* no special open is needed */
	NULL,			/* release */
	minix_sync_file		/* fsync */
};

struct inode_operations minix_file_inode_operations = {
	&minix_file_operations,	/* default file operations */
	NULL,			/* create */
	NULL,			/* lookup */
	NULL,			/* link */
	NULL,			/* unlink */
	NULL,			/* symlink */
	NULL,			/* mkdir */
	NULL,			/* rmdir */
	NULL,			/* mknod */
	NULL,			/* rename */
	NULL,			/* readlink */
	NULL,			/* follow_link */
	minix_bmap,		/* bmap */
	minix_truncate,		/* truncate */
	NULL			/* permission */
};

static int minix_file_read(struct inode * inode, struct file * filp, char * buf, int count)
{
	int read,left,chars;
	int block, blocks, offset;
	int bhrequest, uptodate;
	struct buffer_head ** bhb, ** bhe;
	struct buffer_head * bhreq[NBUF];
	struct buffer_head * buflist[NBUF];
	unsigned int size;

	if (!inode) {
		printk("minix_file_read: inode = NULL\n");
		return -EINVAL;
	}
	if (!S_ISREG(inode->i_mode)) {
		printk("minix_file_read: mode = %07o\n",inode->i_mode);
		return -EINVAL;
	}
	offset = filp->f_pos;
	size = inode->i_size;
	if (offset > size)
		left = 0;
	else
		left = size - offset;
	if (left > count)
		left = count;
	if (left <= 0)
		return 0;
	read = 0;
	block = offset >> BLOCK_SIZE_BITS;
	offset &= BLOCK_SIZE-1;
	size = (size + (BLOCK_SIZE-1)) >> BLOCK_SIZE_BITS;
	blocks = (left + offset + BLOCK_SIZE - 1) >> BLOCK_SIZE_BITS;
	bhb = bhe = buflist;
	if (filp->f_reada) {
		blocks += read_ahead[MAJOR(inode->i_dev)] / (BLOCK_SIZE >> 9);
		if (block + blocks > size)
			blocks = size - block;
	}

	/* We do this in a two stage process.  We first try and request
	   as many blocks as we can, then we wait for the first one to
	   complete, and then we try and wrap up as many as are actually
	   done.  This routine is rather generic, in that it can be used
	   in a filesystem by substituting the appropriate function in
	   for getblk.

	   This routine is optimized to make maximum use of the various
	   buffers and caches. */

	do {
		bhrequest = 0;
		uptodate = 1;
		while (blocks) {
			--blocks;
			*bhb = minix_getblk(inode, block++, 0);
			if (*bhb && !(*bhb)->b_uptodate) {
				uptodate = 0;
				bhreq[bhrequest++] = *bhb;
			}

			if (++bhb == &buflist[NBUF])
				bhb = buflist;

			/* If the block we have on hand is uptodate, go ahead
			   and complete processing. */
			if (uptodate)
				break;
			if (bhb == bhe)
				break;
		}

		/* Now request them all */
		if (bhrequest)
			ll_rw_block(READ, bhrequest, bhreq);

		do { /* Finish off all I/O that has actually completed */
			if (*bhe) {
				wait_on_buffer(*bhe);
				if (!(*bhe)->b_uptodate) {	/* read error? */
				        brelse(*bhe);
					if (++bhe == &buflist[NBUF])
					  bhe = buflist;
					left = 0;
					break;
				}
			}
			if (left < BLOCK_SIZE - offset)
				chars = left;
			else
				chars = BLOCK_SIZE - offset;
			filp->f_pos += chars;
			left -= chars;
			read += chars;
			if (*bhe) {
				memcpy_tofs(buf,offset+(*bhe)->b_data,chars);
				brelse(*bhe);
				buf += chars;
			} else {
				while (chars-->0)
					put_fs_byte(0,buf++);
			}
			offset = 0;
			if (++bhe == &buflist[NBUF])
				bhe = buflist;
		} while (left > 0 && bhe != bhb && (!*bhe || !(*bhe)->b_lock));
	} while (left > 0);

/* Release the read-ahead blocks */
	while (bhe != bhb) {
		brelse(*bhe);
		if (++bhe == &buflist[NBUF])
			bhe = buflist;
	};
	if (!read)
		return -EIO;
	filp->f_reada = 1;
	if (!IS_RDONLY(inode))
		inode->i_atime = CURRENT_TIME;
	return read;
}

static int minix_file_write(struct inode * inode, struct file * filp, char * buf, int count)
{
	off_t pos;
	int written,c;
	struct buffer_head * bh;
	char * p;

	if (!inode) {
		printk("minix_file_write: inode = NULL\n");
		return -EINVAL;
	}
	if (!S_ISREG(inode->i_mode)) {
		printk("minix_file_write: mode = %07o\n",inode->i_mode);
		return -EINVAL;
	}
/*
 * ok, append may not work when many processes are writing at the same time
 * but so what. That way leads to madness anyway.
 */
	if (filp->f_flags & O_APPEND)
		pos = inode->i_size;
	else
		pos = filp->f_pos;
	written = 0;
	while (written<count) {
		bh = minix_getblk(inode,pos/BLOCK_SIZE,1);
		if (!bh) {
			if (!written)
				written = -ENOSPC;
			break;
		}
		c = BLOCK_SIZE - (pos % BLOCK_SIZE);
		if (c > count-written)
			c = count-written;
		if (c != BLOCK_SIZE && !bh->b_uptodate) {
			ll_rw_block(READ, 1, &bh);
			wait_on_buffer(bh);
			if (!bh->b_uptodate) {
				brelse(bh);
				if (!written)
					written = -EIO;
				break;
			}
		}
		p = (pos % BLOCK_SIZE) + bh->b_data;
		pos += c;
		if (pos > inode->i_size) {
			inode->i_size = pos;
			inode->i_dirt = 1;
		}
		written += c;
		memcpy_fromfs(p,buf,c);
		buf += c;
		bh->b_uptodate = 1;
		bh->b_dirt = 1;
		brelse(bh);
	}
	inode->i_mtime = inode->i_ctime = CURRENT_TIME;
	filp->f_pos = pos;
	inode->i_dirt = 1;
	return written;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜亚洲精品理论片色戒 | 欧美网站一区二区| 从欧美一区二区三区| 国产精品综合在线视频| 精品一区二区三区香蕉蜜桃| 日本成人在线一区| 精品一区二区三区视频| 国产裸体歌舞团一区二区| 韩国中文字幕2020精品| 国产不卡一区视频| 色综合天天做天天爱| 欧美色网一区二区| 日韩视频免费直播| 久久先锋影音av鲁色资源| 久久精品视频免费| 亚洲免费资源在线播放| 亚洲成人动漫一区| 卡一卡二国产精品| 成人一区二区在线观看| 在线观看国产日韩| 久久综合五月天婷婷伊人| 国产精品美女一区二区三区 | 日韩精品一区二区三区在线观看| 欧美岛国在线观看| 国产精品每日更新| 亚洲va天堂va国产va久| 国产精品77777竹菊影视小说| 成人一区二区三区视频 | 日韩视频一区二区在线观看| 2023国产精品| 亚洲自拍偷拍九九九| 激情综合色综合久久| 91在线精品秘密一区二区| 欧美日本国产视频| 国产精品日韩成人| 青青草原综合久久大伊人精品优势| 国产一级精品在线| 欧美男男青年gay1069videost | 国产精品美女一区二区在线观看| 一区二区三区在线观看欧美| 久久综合综合久久综合| 97久久超碰国产精品| 久久色视频免费观看| 五月婷婷综合激情| 色综合视频一区二区三区高清| 69久久夜色精品国产69蝌蚪网 | 在线看日本不卡| 亚洲精品一区二区三区福利| 亚洲线精品一区二区三区八戒| 国产91在线观看| 欧美丰满高潮xxxx喷水动漫| 国产精品乱人伦| 美女一区二区三区在线观看| 色呦呦日韩精品| 国产精品女同一区二区三区| 久久精工是国产品牌吗| 欧美日韩在线播放三区四区| 中文字幕亚洲在| 国产一区三区三区| 激情五月婷婷综合| 久久九九全国免费| 欧美四级电影在线观看| 日韩福利视频网| 国产亚洲综合色| 一本色道久久加勒比精品| 亚洲免费视频成人| 久久一日本道色综合| 日韩精彩视频在线观看| 亚洲小少妇裸体bbw| 99视频在线精品| 国产精品女上位| 白白色亚洲国产精品| 欧美高清在线视频| 国产麻豆精品95视频| 久久亚洲综合色一区二区三区 | 国产成人精品午夜视频免费| 精品剧情在线观看| 成人aaaa免费全部观看| 久久综合av免费| 黑人巨大精品欧美一区| 26uuu国产一区二区三区| 国产一区二区三区四区在线观看| 久久在线免费观看| 国产一区二区三区在线观看免费视频| 欧美刺激午夜性久久久久久久| 日本亚洲欧美天堂免费| 日韩精品一区二区三区视频播放| 精品一区二区三区香蕉蜜桃| 久久久久久久久久久电影| 床上的激情91.| 亚洲免费av网站| 91精品国产综合久久久久久| 美女国产一区二区| 国产日韩欧美激情| 欧美在线观看视频在线| 日韩主播视频在线| 国产日韩av一区| 在线观看精品一区| 黑人精品欧美一区二区蜜桃 | 91最新地址在线播放| 一区二区三区四区五区视频在线观看| 欧美久久久久中文字幕| 九九九精品视频| 亚洲欧美视频一区| 欧美一区二区精美| 91丝袜美女网| 久久超碰97中文字幕| 亚洲人成网站色在线观看| 欧美一区二区三区白人 | 亚洲精品国产一区二区精华液| 欧美性大战久久| 国产美女在线精品| 精品一区二区三区香蕉蜜桃| 国产精品国产三级国产a| 欧美日韩一区高清| 国产成人高清视频| 日韩高清不卡在线| 一区二区三区在线免费播放 | 国产自产高清不卡| 亚洲裸体xxx| 国产亚洲精品福利| 日韩亚洲欧美中文三级| 在线免费观看日韩欧美| 国产河南妇女毛片精品久久久| 日韩国产欧美在线观看| 国产精品久久久久国产精品日日| 欧美第一区第二区| 欧美视频在线观看一区二区| 成人亚洲一区二区一| 国产在线精品国自产拍免费| 亚洲成人免费视| 夜夜嗨av一区二区三区中文字幕 | 免费看欧美女人艹b| 亚洲欧洲制服丝袜| 中文字幕欧美日韩一区| 日韩午夜激情免费电影| 欧美久久久久久久久中文字幕| 91影院在线免费观看| 成人高清视频在线观看| 国产高清视频一区| 国产毛片精品一区| 免费亚洲电影在线| 日韩av不卡在线观看| 亚洲午夜羞羞片| 伊人一区二区三区| 成人欧美一区二区三区黑人麻豆 | 国产精品一区二区在线观看网站| 夜夜嗨av一区二区三区| 亚洲色图清纯唯美| 中文字幕日韩一区| 亚洲欧美日韩综合aⅴ视频| 亚洲欧美一区二区在线观看| 国产精品久久看| 日韩一区中文字幕| 一区二区三区四区五区视频在线观看| 亚洲男人的天堂在线aⅴ视频| 亚洲图片你懂的| 亚洲综合一区二区精品导航| 人妖欧美一区二区| 狠狠久久亚洲欧美| 国产成人免费9x9x人网站视频| 国产成人三级在线观看| 成人免费视频免费观看| 91美女在线视频| 欧美人狂配大交3d怪物一区| 3d动漫精品啪啪1区2区免费| 日韩一区二区三区电影 | 亚洲欧美日本韩国| 亚洲一区在线观看免费 | 亚洲va国产va欧美va观看| 手机精品视频在线观看| 国产最新精品免费| 福利一区福利二区| 欧美天堂亚洲电影院在线播放| 欧美日韩视频一区二区| 日韩午夜在线观看视频| 国产日韩欧美a| 亚洲黄一区二区三区| 日一区二区三区| 国产在线播放一区三区四| 91浏览器打开| 日韩你懂的电影在线观看| 国产精品入口麻豆原神| 日韩黄色免费网站| 国产成人亚洲综合a∨婷婷图片| 97久久精品人人澡人人爽| 91精品久久久久久蜜臀| 国产精品网站在线播放| 亚洲愉拍自拍另类高清精品| 美女在线观看视频一区二区| 成人精品小蝌蚪| 欧美一二三四在线| 中文字幕色av一区二区三区| 丝袜a∨在线一区二区三区不卡| 国产成人综合自拍| 欧美福利视频一区| 一区二区三区在线影院| 国产一区二区精品久久| 91麻豆精品国产自产在线观看一区| 中文字幕乱码亚洲精品一区|