資源簡介
華中科技大學操作系統課程設計專用,內含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? {
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
- 上一篇:24位顏色值轉換16位工具
- 下一篇:響應式布局 圖片上下輪播
評論
共有 條評論