📄 sys_file_table1.c
字号:
/////////////////////////////////////////////////////////////////////
#include "general.h"
#include "hd_info_struct.h"
#include "dir_entry.h"
#include "msdos_dir_entry.h"
#include "d_inode.h"
#include "m_inode.h"
#include "buffer_head.h"
#include "fat_cache.h"
#include "file.h"
#include "hd_request_struct.h"
#include "super_block.h"
#include "common_head.h"
int msdos_sys_open(const char * filename,unsigned long flag,unsigned long mode);
int sys_open(const char * filename,unsigned long flag,unsigned long mode);
int msdos_sys_close(int fd);
int sys_close(int fd);
int msdos_sys_lseek(unsigned int fd, int offset, int origin);
int sys_lseek(unsigned int fd, int offset, int origin);
int msdos_sys_read(unsigned int fd,char * buf,int count);
int sys_read(unsigned int fd,char * buf,int count);
int msdos_sys_write(unsigned int fd,char * buf,int count);
int sys_write(unsigned int fd,char * buf,int count);
int sys_getsize(unsigned int fd);
/////////////////////////////////////////////////////////////////////
int sys1_open(const char * filename,unsigned long flag,unsigned long mode)
{
int temp_ret;
if (current_driver == 0)
{
temp_ret = -1;
if (floppy_workstate == 1)
temp_ret = msdos_sys_open(filename, flag, mode);
if (floppy_workstate != 1)
invalid_fd(0);
}
else if ((current_driver > 1) && (current_driver < nr_super_blocks))
temp_ret = sys_open(filename, flag, mode);
else
temp_ret = -1;
return temp_ret;
}
int sys1_close(int fd)
{
long temp_driver;
int temp_ret;
if (fd >= NR_FILE)
return -1;
if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
{
file_table[fd].f_count = 0;
file_table[fd].f_inode = NULL;
return -1;
}
temp_driver = file_table[fd].f_inode->i_dev;
if (temp_driver == 0)
{
temp_ret = msdos_sys_close(fd);
if (floppy_workstate != 1)
invalid_fd(0);
}
else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
temp_ret = sys_close(fd);
else
temp_ret = -1;
return temp_ret;
}
int sys1_lseek(unsigned int fd, int offset, int origin)
{
long temp_driver;
int temp_ret;
if (fd >= NR_FILE)
return -1;
if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
{
file_table[fd].f_count = 0;
file_table[fd].f_inode = NULL;
return -1;
}
temp_driver = file_table[fd].f_inode->i_dev;
if (temp_driver == 0)
{
temp_ret = -1;
if (floppy_workstate == 1)
temp_ret = msdos_sys_lseek(fd, offset, origin);
if (floppy_workstate != 1)
invalid_fd(0);
}
else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
temp_ret = sys_lseek(fd, offset, origin);
else
temp_ret = -1;
return temp_ret;
}
int sys1_read(unsigned int fd,char * buf,int count)
{
long temp_driver;
int temp_ret;
if (fd >= NR_FILE)
return -1;
if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
{
file_table[fd].f_count = 0;
file_table[fd].f_inode = NULL;
return -1;
}
temp_driver = file_table[fd].f_inode->i_dev;
if (temp_driver == 0)
{
temp_ret = -1;
if (floppy_workstate == 1)
temp_ret = msdos_sys_read(fd, buf, count);
if (floppy_workstate != 1)
invalid_fd(0);
}
else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
temp_ret = sys_read(fd, buf, count);
else
temp_ret = -1;
return temp_ret;
}
int sys1_write(unsigned int fd,char * buf,int count)
{
long temp_driver;
int temp_ret;
if (fd >= NR_FILE)
return -1;
if ((file_table[fd].f_count == 0) || (file_table[fd].f_inode == NULL))
{
file_table[fd].f_count = 0;
file_table[fd].f_inode = NULL;
return -1;
}
temp_driver = file_table[fd].f_inode->i_dev;
if (temp_driver == 0)
{
temp_ret = -1;
if (floppy_workstate == 1)
temp_ret = msdos_sys_write(fd, buf, count);
if (floppy_workstate != 1)
invalid_fd(0);
}
else if ((temp_driver > 1) && (temp_driver < nr_super_blocks))
temp_ret = sys_write(fd, buf, count);
else
temp_ret = -1;
return temp_ret;
}
int sys1_getsize(unsigned int fd)
{
int temp_ret;
temp_ret = sys_getsize(fd);
return temp_ret;
}
/////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -