操作系统课程设计 简单的二级文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统》课程设计
题目:设计一个简单二级文件系统
专业:计算机科学与技术
年级:文专计081—1
*名:***
学号:************
指导教师:***
时间:2010.7.12---2010.7.16
2010年7 月15日
一、设计内容
1、可以实现下列几条命令。
Format 格式化
Dir 列文件目录
Create 创建文件
Delete 删除文件
Deldir 删除目录
Open 打开文件
Close 关闭文件
Search 查询文件
Copy 拷贝文件
Cut 剪切文件
二、开发环境
Windows操作系统
Microsoft Visual C++
三、分析设计
(一)实验原理
通过程序模拟Linux文件系统,用一个二进制文件(FileSystem.disk)来模拟磁盘.设计一个多用户的二级文件系经统、实现一般的创建文件、目录,删除文件、目录,切换目录,打开、关闭文件、读写文件等操作。
文件系统,包含格式化,显示文件(目录),创建文件等几个简单命令的实现,而且能完成超级块的读写,节点的读写等过程. 本文件系统采用两级目录,其中第一级对应
于用户账号,第二级对应于用户账号下的文件。另外,为了简单本文件系统未考虑文件共享、文件系统安全以及管道文件与设备文件等特殊内容。
1.程序执行流程图:
2.数据块的分配和回收
(二)程序结构
设计FileSystem类负责管理磁盘空间和磁盘内存I节点,负责对磁盘空间和磁盘数据进行优化管理。并提代接口言方法供用户或程序调用。
(三)数据结构
int physic[100]; //文件地址缓冲区
int style=1; //文件的类型
char cur_dir[10]="root"; //当前目录
int search_i=0;
struct command
{
char com[10];
}cmd[20];
struct block
{
int n; //空闲的盘快的个数
int free[50]; //存放空闲盘快的地址
int a; //模拟盘快是否被占用
}memory[20449];
struct block_super
{
int n; //空闲的盘快的个数
int free[50]; //存放进入栈中的空闲块
int stack[50]; //存放下一组空闲盘快的地址
}super_block;
struct node //i结点信息
{
int file_style; //i结点文件类型
int file_length; //i结点文件长度
int file_address[100]; //i结点文件的物理地址 char file_message[100];
} i_node[640];
struct dir //目录项信息
{
char file_name[10]; //文件名
int i_num; //文件的结点号
char dir_name[10]; //文件所在的目录
} root[640];
四.运行示例及结果分析
菜单
删除目录文件查询
拷贝
剪切
五、程序实现
详细程序请参见源文件, 在此只列举3点
1、剪切文件
程序片段:void cut(char *tmp,char *newname) {
int i; //,j
char t[20];
_strtime(t);
for(i=0;i<640;i++)
if(strcmp(newname,root[i].file_name)==0)
{
break;
}
if(i==640)
{
printf("目录不存在,不能剪切!\n");
return;
}
for(i=0;i<640;i++)
{
if(strcmp(tmp,root[i].file_name)==0)
{
strcpy(root[i].dir_name,newname);
strcpy(i_node[root[i].i_num].change_t,t);//
printf("剪切成功!\n");//
return;
}
}
if(i==640)
printf("文件不存在,执行失败!\n");
}
2.无文件查询
程序片段:void search(char* filename){
int sign=0;
for(search_i=0;search_i<640;search_i++)
{
if(strcmp(root[search_i].file_name,filename)==0) //查询文件中所在目录信息和当前目录信息相同的数据
{
sign=1;
int k=root[search_i].i_num;
printf("%s\t",root[search_i].file_name); //文件名
printf(" %d\t",i_node[k].file_style); //文件的类型
printf(" %d\t\t",i_node[k].file_length); //文件的长度
printf("%s\n",root[search_i].dir_name); //文件所在的目录
}
}
if (sign==0)
{
printf("%s\n","未找到该文件!");
}