二级文件管理技术交底大全报告.docx
- 文档编号:2194801
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:26
- 大小:22.41KB
二级文件管理技术交底大全报告.docx
《二级文件管理技术交底大全报告.docx》由会员分享,可在线阅读,更多相关《二级文件管理技术交底大全报告.docx(26页珍藏版)》请在冰豆网上搜索。
二级文件管理技术交底大全报告
操作系统二级文件管理课程设计
课程设计名称:
二级文件管理系统
专业班级:
学生姓名:
学号
指导老师:
一、设计目的
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。
二、设计内容
为linux系统设计一个简单的二级文件系统。
要求做到以下几点:
(1)可以实现下列几条命令(至少4条);
login用户登陆
dir列文件目录
create创建文件
delete删除文件
open打开文件
close关闭文件
read读文件
write写文件
rename重命名
(2)列目录时要列出文件名、物理地址、保护码和文件长度;
(3)源文件可以进行读写保护。
三、程序设计
1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2、文件物理结构可采用显式链接或其他方法。
3、磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
5、设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:
用户登录、创建目录、删除目录、创建文件、删除文件、读文件、写文件、
重命名、退出。
四、源代码
1、FileSystem.h
#defineDIR_LENGTH1024//路径最长可达100字节
#defineMAX_WRITE1024*128//写入文字可达128k字节
#defineMEM_D_SIZE1024*1024//1M磁盘空间
#defineDISKSIZE1024//磁盘块的大小1K
#defineMSD5//最大子目录数5
#defineDISK_NUMMEM_D_SIZE/DISKSIZE//磁盘块数目1024=1M/1K
#defineFATSIZEDISK_NUM*sizeof(structFatItem)//FAT表大小1024*8=8K
#defineMOFN5//最大文件打开数5
#defineROOT_DISK_NOFATSIZE/DISKSIZE+1//根目录起始盘块号9
#defineROOT_DISK_SIZEsizeof(structDirect)//根目录大小196
#defineLOGIN15
#defineNAME_LONG1
#defineNOT_EXSIT-1
#defineNOT_OPEN-1
#defineDIR_FULL-2
#defineOPEN_FULL-3
#defineALREADY-4
#defineNOT_R_W-4
#defineDISK_FULL-5
#defineNOT_EXIT-1
structFatItem//size8
{intitem;//存放文件下一个磁盘的指针
charem_disk;//磁盘块是否空闲标志位,0空闲
};
structDirect
{structFCB
{charname[8];//文件/目录名8位
charproperty;//属性1位目录0位普通文件
intsize;//文件/目录字节数、盘块数)
intfirstDisk;//文件/目录起始盘块号
intnext;//子目录起始盘块号
intsign;//1是根目录0不是根目录
}directItem[MSD+2];//最大子目录5
};
structOpenTable
{structOpenTableItem
{charname[9];//文件名
intfirstdisk;//起始盘块号
intsize;//文件的大小
charopen_flag;//文件打开标志:
'1':
打开。
'0':
未打开
}openitem[MOFN];//最大文件打开数5
intcur_size;//当前打文件的数目
};
structFatItem*fat;//FAT表
structDirect*root;//根目录
structDirect*cur_dir;//当前目录
structOpenTableuser_openTable;//文件打开表
intfd=-1;//文件打开表的序号
char*bufferdir;//记录当前路径的名称
char*fdisk;//虚拟磁盘起始地址
intcur_user;
intfind_N=0;
voidinit();
voidformat();
voidenter();
voidassign();
intcreate(char*name);
intopen(char*name);
intclose(char*name);
intrename();
intwrite(intfd,char*buf,intlen,char*name);
intread(intfd,char*buf,char*name);
intdel(char*name);
voiddir();
intlogin();
voidhelpMenu();
voidcurrentPath();
2、FileSystem.cpp
#include
#include
#include"conio.h"
#include"FileSystem.h"
#include
intstatue=0;
charuser[20]="li";
charpassword[20]="123";
intmain()
{FILE*fp;
charch;
charcmd[13];
charname[10];
inti,flag;
char*contect;
helpMenu();
while((flag=login())!
=LOGIN)
{printf("密码不正确!
\n");
printf("请输入正确的用户名和密码!
\n");
}
contect=(char*)malloc(MAX_WRITE*sizeof(char));
if((fp=fopen("disk.bat","rb"))==NULL)//创建一个文件
{
printf("Willyouinitializethedisk?
(yorn)");
scanf("%s",&ch);
if(ch=='y')
{init();
printf("InitializeSucceed!
\n");}
else
{return0;}
}
enter();
//分析命令
while
(1)
{printf("%s/>",bufferdir);
scanf("%s",cmd);
if(strcmp(cmd,"help")==0||strcmp(cmd,"?
")==0)
{helpMenu();}
elseif(strcmp(cmd,"model")==0)
{printf("需要修改密码么(y/n)");
scanf("%s",&ch);
if(ch=='y')
{printf("请输入密码\b");
scanf("%s",&password);
printf("修改成功");}
else
{printf("退出修改密码\n");}
}
elseif(strcmp(cmd,"login")==0)
{while(login()!
=LOGIN)
{printf("请输入正确的用户名或密码\n");}
}
elseif(strcmp(cmd,"quit")==0)
{free(contect);
exit
(1);
return0;
}
elseif(strcmp(cmd,"create")==0)
{scanf("%s",name);
flag=create(name);
//关于创建文件共实现四个判断
if(flag==NAME_LONG)
{//文件名太长
printf("Error:
\n文件的名称太长!
\n");}
elseif(flag==DIR_FULL)
{//目录下文件数超
printf("Error:
\n该目录下的文件和目录数已满!
\n");}
elseif(flag==ALREADY)
{//重名
printf("Error:
\n该目录下已存在该文件!
\n");}
elseif(flag==DISK_FULL)
{//磁盘空间满
printf("Error:
\n磁盘空间已满!
\n");}
else
{printf("成功创建文件!
\n");}
}
elseif(strcmp(cmd,"open")==0)
{statue=1;
scanf("%s",name);
fd=open(name);
if(fd==NOT_EXSIT)
{printf("Error:
\n所要打开的文件不存在!
\n");}
else
{printf("打开成功!
\n");}
}
elseif(strcmp(cmd,"write")==0)
{statue=2;
scanf("%s",name);
if(fd==NOT_OPEN)
{
printf("Error:
\n该文件没有打开,请打开后再写入\n");
}
else
{
printf("请输入文件的内容:
");
scanf("%s",contect);//connect为一个长度为128字节的变量值
flag=write(fd,contect,strlen(contect),name);
if(flag==0)//每个盘块可写入最多128字节
{
printf("已成功写入!
\n");
}
else
{
printf("Error:
\n硬盘空间不足,无法写入!
\n");
}
}
}
elseif(strcmp(cmd,"read")==0)
{
statue=3;
scanf("%s",name);
fd=open(name);
if(fd==NOT_EXSIT)
{
printf("Error:
\n不存在该文件,不能读!
\n");
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 文件 管理 技术 交底 大全 报告