操作系统课程设计 简单的二级文件系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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","未找到该文件!");

}

相关文档
最新文档