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

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

?? file.c

?? LINUX1.0源代碼,代碼條理清晰
?? 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一区二区三区免费野_久草精品视频
日韩精品电影一区亚洲| 国产精品第四页| 一本色道久久综合亚洲aⅴ蜜桃 | 99久久精品免费看国产免费软件| 蓝色福利精品导航| 国产麻豆精品视频| 国产高清视频一区| 欧美性受xxxx黑人xyx性爽| 99视频一区二区| 97精品国产露脸对白| 欧美日韩aaa| 国产精品天干天干在观线| 久久久久久99久久久精品网站| 国产喷白浆一区二区三区| 亚洲综合一区二区| 国产乱国产乱300精品| 国产成人综合视频| 精品污污网站免费看| 日韩欧美第一区| 欧美韩国日本不卡| 美女视频黄频大全不卡视频在线播放 | 精品福利av导航| 成人免费在线视频| 黄页网站大全一区二区| 99riav久久精品riav| 欧美刺激午夜性久久久久久久| 亚洲欧洲av一区二区三区久久| 日韩成人午夜精品| 91视频观看免费| 亚洲欧洲成人自拍| 国产成人自拍网| 欧美一区二区三区免费视频 | 欧美日韩精品欧美日韩精品| 久久蜜臀精品av| 精品亚洲porn| 欧美不卡一区二区三区| 亚洲成va人在线观看| 欧美酷刑日本凌虐凌虐| 视频一区二区三区入口| 精品1区2区3区| 视频在线观看一区二区三区| 91极品视觉盛宴| 午夜一区二区三区在线观看| 欧洲一区二区av| 亚洲自拍另类综合| 91精品国产综合久久精品图片| 一区二区三区欧美| 777亚洲妇女| 国产电影一区二区三区| 国产精品国产三级国产aⅴ无密码| 国产mv日韩mv欧美| 国产精品福利一区| 欧美三级三级三级| 男人操女人的视频在线观看欧美| 日韩欧美国产精品| 99久久精品国产网站| 日韩成人免费电影| 亚洲国产精品t66y| 欧美日韩一区二区三区不卡| 奇米影视7777精品一区二区| 中文字幕av一区 二区| 欧美亚洲高清一区| 成人动漫精品一区二区| 亚洲伊人伊色伊影伊综合网| 欧美一区二区日韩| 色婷婷综合激情| 国产福利视频一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 国产午夜精品一区二区| 欧美唯美清纯偷拍| www.成人网.com| 岛国精品在线播放| 国产一区二区成人久久免费影院 | www.66久久| 国产一区999| 日本不卡的三区四区五区| 亚洲男人的天堂一区二区| 国产精品欧美一区二区三区| 亚洲精品一线二线三线 | 亚洲综合色丁香婷婷六月图片| 国产女人水真多18毛片18精品视频 | 91麻豆福利精品推荐| 国产乱色国产精品免费视频| 青青草国产精品97视觉盛宴| 天天影视网天天综合色在线播放| 亚洲精品视频在线观看网站| 国产精品视频一区二区三区不卡| www一区二区| 精品国产精品网麻豆系列| 欧美一区二区视频在线观看| 欧美群妇大交群中文字幕| 在线欧美日韩精品| 日韩一级成人av| 欧美sm极限捆绑bd| 国产精品第五页| 亚洲a一区二区| 国产麻豆精品视频| av在线这里只有精品| 91色porny蝌蚪| 欧美综合一区二区三区| 日韩一区二区免费在线观看| 久久久久久久久久久电影| 亚洲精品成人a在线观看| 日韩精品免费专区| 成人夜色视频网站在线观看| 一本色道久久综合亚洲91| 日韩欧美一级在线播放| 国产精品久久99| 亚洲一区二区三区四区在线| 午夜视频一区二区三区| 国产麻豆精品95视频| 欧美日本在线播放| 欧美国产综合色视频| 蜜臀av性久久久久蜜臀aⅴ| 色狠狠桃花综合| 国产精品久久久久久久久动漫 | 91黄视频在线观看| 国产性天天综合网| 麻豆成人在线观看| 欧美mv和日韩mv国产网站| 亚洲一区免费视频| 欧美在线你懂得| 一区二区三区在线观看国产| 久久草av在线| 欧美大片一区二区| 亚洲国产日韩精品| 在线观看亚洲a| 亚洲高清免费在线| 91精品国产高清一区二区三区| 亚洲三级电影网站| 欧美久久一区二区| 爽好久久久欧美精品| 宅男在线国产精品| 久久精品99久久久| 精品日韩一区二区| 国产成人亚洲综合a∨婷婷图片| 久久亚洲精品国产精品紫薇 | 日韩欧美自拍偷拍| 精品一区二区国语对白| 久久综合网色—综合色88| 国产高清精品网站| 亚洲免费资源在线播放| 在线免费av一区| 国产乱码精品一区二区三| 洋洋成人永久网站入口| 久久久久综合网| 欧美性受极品xxxx喷水| 国产真实乱偷精品视频免| 久久久久久久性| 91精品国产入口在线| 国内外精品视频| 一区二区三区在线观看欧美| 日韩视频在线一区二区| 91蜜桃在线观看| 国产精一品亚洲二区在线视频| 亚洲国产精品自拍| 亚洲视频一区二区免费在线观看| 精品av综合导航| 欧美二区在线观看| 丁香婷婷深情五月亚洲| 青青草97国产精品免费观看| 一区二区三区在线视频观看| 欧美激情一二三区| 国产精品色在线观看| 久久日韩精品一区二区五区| 欧美猛男超大videosgay| 欧洲精品在线观看| 成人性生交大片免费看在线播放| 亚洲h在线观看| 天天综合日日夜夜精品| 亚洲va欧美va天堂v国产综合| 亚洲色图一区二区| 一区二区免费在线播放| 欧美国产日韩a欧美在线观看| 国产日产欧美一区| 国产亚洲欧美一级| 久久日一线二线三线suv| 日韩一区二区精品在线观看| 欧美丰满少妇xxxbbb| 精品日韩欧美一区二区| 久久久亚洲国产美女国产盗摄 | 美腿丝袜一区二区三区| 美女精品自拍一二三四| 狠狠色伊人亚洲综合成人| 久久精品国产亚洲一区二区三区 | 日韩一区二区三区免费看 | 欧美优质美女网站| 欧美色图激情小说| 欧美变态tickling挠脚心| 日韩一区在线免费观看| 一区二区三区美女| 精品一区二区三区免费播放| 国产福利91精品一区二区三区| 91小视频免费看| 在线综合+亚洲+欧美中文字幕| 精品成人一区二区三区四区| 18欧美乱大交hd1984| 国产一区高清在线| 91精品国产乱| 香蕉av福利精品导航|