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 + -
显示快捷键?