⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regfd.cc

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 CC
字号:
#include <lib/root.h>#include <lib/errno.h>#include <fs/inode.h>#include "regfd.h"regfd_t::~regfd_t(){	inode->lose();}int openregfd(int flags, inode_t * inode, fdes_t ** fdes){	int e = 0;	*fdes = NULL;	if (inode->isdir() && (flags & FDWRITE))		return EISDIR;	if ((flags & OTRUNC) && (e = inode->truncate()))		return e;	regfd_t * r = new regfd_t();	r->type = REGFD;	r->fdflags = flags;	r->refcnt = 1;	(r->inode = inode)->hold();	r->curpos = 0;	*fdes = r;	return 0;}int regfd_t::read(void * buf, int count){	int e;	if ((e = inode->read(curpos, buf, count)) > 0)		curpos += e;	return e;}int regfd_t::write(void * buf, int count){	int e;	assert(!inode->isdir());	if (fdflags & FDAPPEND)		curpos = inode->size;	if ((e = inode->write(curpos, buf, count)) > 0)		curpos += e;	return e;}int regfd_t::lseek(off_t off, int whence){	off_t newpos;	switch (whence) {		case 0: newpos = off;			break;		case 1: newpos = curpos + off;			break;		case 2: newpos = inode->size + off; 			break;		default:			return EINVAL;	}	if (newpos < 0)		return EINVAL;	curpos = newpos;	return newpos;}int regfd_t::ioctl(int cmd, ulong arg){	return ENOTTY;}int regfd_t::getdents(dirent_t * de, int nbyte){	return inode->getdents(&curpos, de, nbyte);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -