vfsio.c

来自「一个操作系统,用C语言实现开发的,我在一个浙江大学的操作系统实验网站找到.大家学」· C语言 代码 · 共 52 行

C
52
字号
// VFS IO Layer

#include <vfs.h>
#include <knllib.h>
#include <string.h>
#include <memory.h>
#include "vfsio.h"

long fsioOpen(VFSIODEF *io, const char *dev, int mode)
{
	io->handle = (_u32)vfsOpen(dev, mode);
	return io->handle?ERR_SUCCESS:ERR_INVALID;
}

void fsioClose(IOH handle)
{
	vfsClose((HFILE)handle->handle);
	handle->handle = 0;
}

// device has already been opened
long fsioOpenHandle(VFSIODEF *io, _u32 handle)
{
	io->handle = handle;
	io->sector_size = 512;
	return 0;
}

int fsioIsHandleValid(IOH handle)
{
	return handle && handle->handle;
}

int fsioRead(IOH handle, _u32 pos, void *buf, int num)
{
	long len;
	vfsSeek((HFILE)handle->handle, (_s64)((_u64)pos*handle->sector_size), SEEK_SET);
	len = vfsRead((HFILE)handle->handle, buf, handle->sector_size*num);
	if(len<0) return 0;
	if(len<handle->sector_size*num)
		memset(buf, 0, num*handle->sector_size-len);
	return num;
}

int fsioWrite(IOH handle, _u32 pos, void *buf, int num)
{
	long len;
	vfsSeek((HFILE)handle->handle, (_s64)((_u64)pos*handle->sector_size), SEEK_SET);
	len = vfsWrite((HFILE)handle->handle, buf, handle->sector_size*num);
	return len<0 ? 0 : (len/handle->sector_size);
}

⌨️ 快捷键说明

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