• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签:

资源简介

华中科技大学操作系统课程设计专用,内含5个部分: 1.1 利用系统调用实现文件拷贝(含代码和makefile) 1.2 多进程编程,实现三个子进程窗口(含代码和makefile) 2 自己的系统调用,只有系统调用实现的代码,系统调用需要自己编译内核 3 字符设备驱动的编写(含代码和makefile) 4 GTK编写系统监视器,可以监测系统很多方面(含代码和makefile) 5 虚拟文件系统(实现的比较简单)(含代码和makefile) 说明:本程序是简单虚拟文件系统(Windows下也可运行)特点如下: 1.支持10M文件 2.支持多级目录,目录层次无限制(目录和文件总数量好像在1000左右,可自己调整代码) 3.支持建立,写入,读取,复制,删除文件 4.支持格式化文件系统(磁盘),备份还原文件系统 实现的比较简单,总的代码量在1100行左右

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

#define BLOCKSIZE 1024
#define SIZE 1024 * 1024//1 M
#define END 65535 //EOF
#define FREE 48
#define USED 49
#define FCBBLOCKNUM 100
#define MAXLENGTH 10
#define MAXOPEN 5
#define COMMANDNUM 14

#define ERROR_DISK_NO_SPACE                                     99

#define ERROR_MKDIR_IS_FULL  100
#define ERROR_MKDIR_CONFLICT_NAME  101
#define ERROR_MKDIR_USELESS_DIRNAME  102
#define ERROR_MKFILE_IS_FULL  103
#define ERROR_CD_PATH_NOT_FOUND 104
#define ERROR_RM_FILE_NOT_FOUND 105
#define ERROR_RM_DIR_IS_NOT_EMPTY 106
//#define ERROR_WRITE_FILE_NOT_FOUND 107
#define ERROR_READ_FILE_NOT_FOUND 108
#define ERROR_READ_FILE_IS_EMPTY 109
#define ERROR_WRITE_FILE_NOT_FOUND 110
#define ERROR_OPEN_FILE_NOT_FOUND 111
#define ERROR_OPEN_FILE_IS_OPENED 112
#define ERROR_OPEN_OPENTABLE_IS_FULL                    113
#define ERROR_CLOSE_FILE_NOT_FOUND 114
#define ERROR_CLOSE_FILE_NOT_OPENED 115
#define ERROR_CP_SRCFILE_NOT_FOUND                      116
#define ERROR_CP_DSTFILE_IS_EXIST                              117
#define ERROR_CP_IS_FULL                                              118

typedef struct _FCB{
int id;
//int pid;//each dir has a parent id
char filename[8];
char isdir;//1:yes 2 no
struct tm data_time;
unsigned int firstblock;
unsigned int size;
int record[10]; //10 file in one dir most or 10 blocks in one file
int length;
}FCB;

typedef struct _OPENTABLE{
char name[20];
struct tm data_time;
int size;
}OPENTABLE;

typedef struct _FILEOPEN{
OPENTABLE opened[MAXOPEN];
int opennum;
}FILEOPEN;

#define MAXFILENUM FCBBLOCKNUM * BLOCKSIZE * sizeof(char) / sizeof(FCB)
FCB *root;
FCB *cur_dir;
FILEOPEN fileopened;
FILE *fp;
int id = 1;
int fd = -1;
char currentdir[80];
int currentid = 0;
char *fdisk;
time_t timep;
int GetCommandType(char *command);

void LoadSys();
void InitSystem();
//void mShowMenu();
void mFormat();
int mMkdir();
void mLs(void);
int mCd(void);
int mMkfile(void);
int mOpen(void);
int mClose(void);
int mRead(void);
int mWrite(void);
int mCp(void);
int mRm(void);
void mExit(void);
void ErrorConfig(int errorcode);
void FreeFCB(FCB *fcb);

int BackUp(void);





//0 command not exist
//1 format
//2 mkdir
//3 ls
//4 cd
//5 mkfile
//6 open
//7 close
//8 read
//9 write
//10 cp
//11 rm
//12 exit
int GetCommandType(char *command)
{
char cmd[COMMANDNUM][10] = {
““ “format“ “mkdir“ “ls“ “cd“           //0:““ 1:format 2:mkdir 3:ls 4:cd
“mkfile“ “open“ “close“ “read“         //5:mkfile 6:open 7:close 8:read
“write“ “cp“ “rm“ “exit“ “backup“                     //9:write 10:cp 11:rm 12:exit
};
int i;
for(i = 0; i < COMMANDNUM; i++)
{
if(strcmp(cmd[i] command) == 0)
return i;
}
return 0;
}

void LoadSys()
{
fileopened.opennum = 0;
if((fp = fopen(“VirtualDisk.txt“ “rb“)) == NULL)
{
printf(“LoadSys : file doesn‘t exist!\n“);
//getchar();
//fclose(fp);
InitSystem(); // file doesn‘t exist
r

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1048576  2015-03-13 09:45  5-vfs\backup.disk

     文件         49  2015-03-12 19:49  5-vfs\makefile

     文件      22743  2015-03-12 20:14  5-vfs\vfs.c

     文件    1048576  2015-03-13 09:44  5-vfs\VirtualDisk.txt

     目录          0  2015-04-14 17:26  5-vfs

----------- ---------  ---------- -----  ----

              2119944                    5


评论

共有 条评论