操作系统原理课程设计文件管理系统方案

合集下载

操作系统课程设计-文件管理

操作系统课程设计-文件管理

目 录一、基本想 .............................................. - 0 -1.1编写目的 ................................................. - 1 -1.2简单描述 ................................................. - 1 -二、公共变量及数据结构 .................................. - 1 -2.1公共变量 ................................................. - 1 -2.2数据结构 ................................................. - 1 -三、主要函数的过程描述 .................................. - 2 -3.1 路径显示 ................................................. - 2 -3.2右键快捷菜单操作 ......................................... - 3 -3.3命令窗口 ................................................. - 3 -3.4创建文本文档 ............................................. - 4 -3.5创建可执行文件 ........................................... - 4 -3.5.1指令选择 ............................................... - 4 -3.5.2已选指令删除 ........................................... - 5 -3.5.3创建可执行文件 ......................................... - 5 - 四、运行截图 ............................................ - 6 -4.1主界面 ................................................... - 6 - 4.2树形结构及右键快捷菜单 ................................... - 6 - 4.3创建文本文档 ............................................. - 7 - 4.4创建可执行文件 ........................................... - 8 - 五、使用说明 ............................................ - 8 -5.1功能说明 ................................................. - 8 -5.2操作说明 ................................................. - 8 -5.2.1快捷菜单及命令窗口 ..................................... - 8 -5.2.2创建文本文档 ........................................... - 9 -5.2.3创建可执行文件 ......................................... - 9 -5.2.4删除文件 ............................................... - 9 -六、总结 ................................................ - 9 -一、基本思想装订线1.1编写目的通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统,设计、构造和开发现代操作系统的基本能力。

操作系统原理实用教程课程设计 (2)

操作系统原理实用教程课程设计 (2)

操作系统原理实用教程课程设计1. 课程设计目标本课程设计旨在帮助学生更深入地了解操作系统原理,并能够通过实际操作来加深对操作系统的理解和掌握。

2. 前置知识在进行本课程设计前,学生需要具备以下基础知识:•C/C++编程基础•操作系统原理基础知识3. 实验环境•操作系统:Windows/Linux/MacOS•IDE:Visual Studio/Code::Blocks/Eclipse•虚拟机软件:VirtualBox/VMware Workstation4. 实验内容本课程设计共分为三个实验,分别是进程管理、内存管理和文件系统管理。

4.1 进程管理实验4.1.1 实验要求•了解进程的概念和属性;•能够创建、销毁进程;•能够进行进程调度,并理解不同的调度算法;•能够进行进程同步和互斥。

1.编写一个简单的进程管理程序,能够创建和销毁进程,并实现不同的调度算法;2.添加同步和互斥机制,保障进程之间的资源访问安全;3.进行各种场景模拟测试,例如高优先级进程抢占低优先级进程等情况。

4.2 内存管理实验4.2.1 实验要求•了解内存管理的概念和基本算法;•能够分配和回收内存;•能够进行内存地址转换和内存保护;•能够进行内存压缩和页面置换。

4.2.2 实验步骤1.编写一个简单的内存管理程序,能够分配和回收内存,并实现基本的地址转换和保护机制;2.添加内存压缩算法,并进行测试;3.实现简单的页面置换算法,并进行测试。

4.3 文件系统管理实验4.3.1 实验要求•了解文件系统的概念和基本结构;•能够进行数据存储和读取;•能够进行文件的创建、删除和修改;•能够进行文件系统的备份和还原。

1.编写一个简单的文件系统管理程序,能够实现文件的创建、删除和修改;2.添加文件读取功能,并进行测试;3.实现文件系统备份和还原机制,并进行测试。

5. 实验报告每个学生在完成以上实验后,需要撰写一份实验报告,包括实验目的、实验环境、实验步骤、实验心得等内容。

整理操作系统原理课程设计文件管理系统方案

整理操作系统原理课程设计文件管理系统方案

文件编号:BA-80-1F-0A-4C 《操作系统》课程教学大纲文件编号:BA-80-1F-0A-4CGDOU-B-11-213《操作系统》课程教学大纲课程简介课程简介:本课程主要讲述操作系统的原理,使学生不仅能够从系统内部了解操作系统的工作原理,而且可以学到软件设计的思想方法和技术方法。

主要内容包括:操作系统的概论;操作系统的作业管理;操作系统的文件管理原理;操作系统的进程概念、进程调度和控制、进程互斥和同步等;操作系统的各种存储管理方式以及存储保护和共享;操作系统的设备管理一般原理。

其次在实验环节介绍实例操作系统的若干实现技术,如:Windows操作系统、Linux操作系统等。

课程大纲一、课程的性质与任务:本课程计算机学科的软件工程专业中是一门专业方向课,也可以面向计算机类的其它专业。

其任务是讲授操作系统的原理,从系统内部了解操作系统的工作原理以级软件设计的思想方法和技术方法;同时介绍实例操作系统的若干实现技术。

二、课程的目的与基本要求:通过本课程的教学使学生能够从操作系统内部获知操作系统的工作原理,理解操作系统几大管理模块的分工和管理思想,学习设计系统软件的思想方法,通过实验环节掌握操作系统实例的若干实现技术,如:Windows操作系统、Linux操作系统等。

三、面向专业:软件工程、计算机类四、先修课程:计算系统基础,C/C++语言程序设计,计算机组成结构,数据结构。

五、本课程与其它课程的联系:本课程以计算系统基础,C/C++语言程序设计,计算机组成结构,数据结构等为先修课程,在学习本课程之前要求学生掌握先修课程的知识,在学习本课程的过程中能将数据结构、计算机组成结构等课程的知识融入到本课程之中。

六、教学内容安排、要求、学时分配及作业:第一章:操作系统概论(2学时)第一节:操作系统的地位及作用操作系统的地位(A);操作系统的作用(A)。

第二节:操作系统的功能单道系统与多道系统(B);操作系统的功能(A)。

操作系统课程设计---文件管理

操作系统课程设计---文件管理
else {p=p3->headlink; i=1;
printf("| num | name | sex |\n");
printf("---------------------------------------\n");
struct linkr *headlink;
struct linkt *next;
};
struct linkf mfd[5];
struct links *ufd,*p2,*q2;
struct linkr *p,*q;
struct linkt *afd,*p3,*q3;
if(afd==NULL) afd=p3; else q3->next=p3;
strcpy(p3->filename,X);
p3->length=p2->length;
p3->headlink=p2->headlink;
q2=q2->next;
if(strcmp(q2->filename,X)==0)
{printf("File has already been created!\n");
return;
}
}
p2=(struct links *)malloc(sizeof(struct links));
scanf("%s",X);
p3=afd;
if(p3!=NULL)
{ while((strcmp(p3->filename,X)!=0)&&(p3->next!=NULL))
{ q3=p3;

操作系统课程设计-文件管理系统的设计与实现(附源程序)

操作系统课程设计-文件管理系统的设计与实现(附源程序)

需要全套设计请联系QQ174320523 各专业都有课程设计课程名称___操作系统课程设计_ __题目名称文件管理系统的设计与实现学生学院_ 计算机学院__________专业班级____ 04级软件工程2班_____学号学生姓名指导教师____ ______________2007年1月5日广东工业大学课程设计任务书题目名称文件管理系统的设计与实现学生学院计算机学院专业班级04级软件工程2班姓名学号一、课程设计的内容通过课程设计, 加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。

编写并调试一个树型目录结构的文件系统,模拟文件管理工作流程。

二、课程设计的要求与数据1.设计多用户文件系统,采用多级文件目录。

2.至少要有十个以上的实用命令,应设置文件保护措施。

3.设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令。

三、课程设计应完成的工作1.每位同学必须认真完成设计内容,并按照要求撰写课程设计说明书1份(不少于3000字)。

在最后截止时间前提交电子和打印文档两部分内容。

2.电子部分以电子邮件方式或者U盘拷贝方式提交给班长。

把设计内容压缩为一个文件,文件名应为:“序号”+“姓名”。

内容包括:源文件、可执行文件、演示运行结果、课程设计报告,最后由班长以班为单位刻录两张光盘,统一交给任课教师。

3.每人自己打印操作系统课程设计报告的纸质文档,装订后交给班长,班长收齐清点后统一交给任课教师。

课程设计论文具体包括以下内容:(1)设计思想说明(5%);(2)系统结构的说明(15%);(3)数据结构的说明(5%);(4)各模块的算法流程图(5%);(5)程序运行及清单(共60%,其中书面源程序占20%,光盘的源程序在计算机上实现程度占40%)(6)使用说明书(即用户手册)(内容包含如何登录、退出、读、写、等操作说明)(5%分)(7)体会,建议(5%)四、课程设计进程安排五、应收集的资料及主要参考文献《计算机操作系统》(修订版),汤子瀛,西安电子科技大学出版社;《计算机操作系统学习指导与题解》,汤子瀛,西安电子科技大学出版社;《操作系统实验与设计指导》,傅秀芬,广东工业大学;《Unix实验上机指导》,林小平,李立希,广东工业大学;发出任务书日期: 2006年 10 月 13 日指导教师签名:申建芳计划完成日期: 2007年 1 月 5 日基层教学单位责任人签章:主管院长签章:摘要和关键字(400字):摘要:课程设计内容是要完成一个多用户的文件系统.使用的设计语言是C++,开发环境是C++BUILDER6.参考资料有<<C++Builder6程序设计>>,<<C++编程开发实例>>,<<Java案例开发集锦>>,<<JBuilder9编程思想与实践>>.因为在学习JAVA的过程中,发现其中有很多东西很有用,而且发各种语言虽然有很大的不同,但是也有很多共同的东西,之前可以相互参考.所以在用一门语言开发时,我们也可以参考下其它的语言,这个可能对我们的开发有很大帮助.而且可以扩大我们的知识面.开发目标,利用C++Builder完成一个同WindowsXP的文件管理器有相似界面,符合设计要求的图形窗口的程序.这样的设计是为了能够方便用户操作,而WindowsXP是人们非常熟悉的操作系统,而文件管理器同样是人们非常熟悉的.开发的过程,学过软件工程后,我明白了采用软件工程的方法来设计软件重要性,同时也方便我们的开发使我们的设计更加容易,更加快,更容易维护,更容易调试.C++Builder也是这样一种优秀的编译器,提供可视化的编程环境,和模块化设计的思想,在设计过程中,不仅扩展了知识面而且提高了编程的能力.总的来说,有了很大的提高.关键字:多用户的文件系统, C++Builder, 文件管理器, , 图形窗口,可视化的编程环境, 模块化设计一、设计思想说明:本程序是根据WindwowXP 的文件管理系统来篇的。

操作系统课程设计文件管理系统

操作系统课程设计文件管理系统

操作系统课程设计文件管理系统1. 引言文件管理是操作系统中的一个重要模块,负责对计算机中的文件进行管理和组织。

在操作系统课程设计中,设计一个文件管理系统是一个很有挑战性的任务,需要考虑到文件的创建、打开、读取、写入、删除等功能,并且要确保文件的安全性和可靠性。

本文将详细介绍文件管理系统的设计与实现。

2. 需求分析为了满足用户对文件管理的需要,我们需要对文件管理系统的需求进行分析。

在这个文件管理系统中,用户应该能够执行以下操作:•文件的创建和命名•文件的打开和关闭•文件的读取和写入•文件的删除和修改•文件的搜索和查找除此之外,还要考虑到对文件权限的管理,可以设置不同用户对文件的不同访问权限,以保障文件的安全性。

3. 概要设计概要设计是对文件管理系统的整体架构和功能进行规划和设计。

文件管理系统可以采用层次结构的设计方式,分为用户界面、文件管理模块和存储管理模块。

3.1 用户界面用户界面是用户与文件管理系统进行交互的接口,可以通过命令行或者图形界面来实现。

在用户界面中,用户可以输入相关指令来执行对文件的操作,如创建文件、打开文件、读取文件等。

3.2 文件管理模块文件管理模块是文件管理系统的核心模块,负责对文件进行创建、打开、读取、写入、删除等操作。

在文件管理模块中,需要维护一个文件目录表来记录文件的基本信息,如文件名、文件大小、文件权限等。

还需要考虑到文件的分配和回收,可以使用位示图等方式进行实现。

3.3 存储管理模块存储管理模块负责对文件进行存储和管理,包括磁盘空间的分配和回收。

在存储管理模块中,可以采用文件分配表或者索引节点进行存储方式的选择。

4. 详细设计在详细设计阶段,需要对概要设计中的每个模块进行详细设计,并确定各个模块之间的接口和数据结构。

4.1 用户界面设计用户界面设计可以采用命令行方式进行实现。

用户可以通过命令输入来执行相应的文件管理操作。

可以设计一系列命令,如create用于创建文件,open用于打开文件,read用于读取文件等。

操作系统课程设计-模拟一个简单二级文件管理系统

操作系统课程设计-模拟一个简单二级文件管理系统

模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

设计内容:模拟一个简单二级文件管理系统一、实验内容描述1 实验目标本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现.2 实验要求为DOS系统设计一个简单的二级文件系统.要求做到以下几点:①可以实现下列命令:login 用户登录dir 列文件目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件②列目录时要列出文件名、物理地址、保护码和文件长度.③源文件可以进行读写保护.二、程序主要内容1设计思路程序中要求每个用户在登陆后才可对其拥有的文件进行操作,用户对于其他用户的文件无操作权.文件操作包括浏览、创建、删除、打开、关闭、阅读、写入、修改模式.其他操作包括新建用户、帮助、用户登入、用户登出、退出系统.在程序文件夹下有个名为“file”的系统根目录,此目录下包括:一个名为“mfd”的文件,记录所有注册过的帐号及密码;用户文件,以用户名作为文件名,内容为其拥有的文件名及属性;一个名为“keiji”的文件夹.“keiji”文件夹中包括:“file.p”指针文件,记录所有已用的物理地址;一些以物理地址为名的文件,内容为文件内容.2 数据结构file结构体系统文件数据结构:fpaddrint,文件的物理地址、flengthint,文件长度、fmodeint,文件模式0.只读;1.可写;2.可读写;3.保护、fname[]char,文件名;filemode结构体文件状态数据结构:isopenint,文件当前状态,0.关闭;1.打开、modeint,文件模式0.只读;1.可写;2.可读写;3.初始化;user结构体用户信息数据结构:uname[]char,用户名、upassword[]char,用户密码;userfile结构体用户文件数据结构:uname[]char,用户名、ufile[]file,用户拥有的文件数组.代码:#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <string.h>#define MaxUser 100 //定义最大MDF主目录文件#define MaxDisk 512*1024 //模拟最大磁盘空间#define commandAmount 12 //对文件操作的指令数//存储空间管理有关结构体和变量char disk[MaxDisk]; //模拟512K的磁盘存储空间typedef struct distTable //磁盘块结构体{int maxlength;int start;int useFlag;distTable *next;}diskNode;diskNode *diskHead;struct fileTable //文件块结构体{char fileName[10];int strat; //文件在磁盘存储空间的起始地址int length; //文件内容长度int maxlength; //文件的最大长度char fileKind[3]; //文件的属性——读写方式struct tm *timeinfo;bool openFlag; //判断是否有进程打开了该文件//fileTable *next;};//两级目录结构体typedef struct user_file_directory //用户文件目录文件UFD {//char fileName[10];fileTable *file;user_file_directory *next;}UFD;//UFD *headFile;typedef struct master_file_directory //主文件目录MFD{char userName[10];char password[10];UFD *user;}MFD;MFD userTable[MaxUser];int used=0; //定义MFD目录中用已有的用户数//文件管理void fileCreate(char fileName[],int length,char fileKind[]); //创建文件void fileWrite(char fileName[]); //写文件void fileCat(char fileName[]); //读文件void fileRen(char fileName[],char rename[]); //重命名文件void fileFine(char fileName[]); //查询文件void fileDir(char UserName[]); //显示某一用户的所有文件void fileClose(char fileName[]); //关闭已打开的文件void fileDel(char fileName[]); //删除文件void chmod(char fileName[],char kind[]); //修改文件的读写方式int requestDist(int &startPostion,int maxLength); //磁盘分配查询void initDisk(); //初始化磁盘void freeDisk(int startPostion); //磁盘空间释放void diskShow(); //显示磁盘使用情况//用户管理void userCreate();int login();int userID=-1; //用户登录的ID号,值为-1时表示没有用户登录int main(){char order[commandAmount][10];strcpy(order[0],"create");strcpy(order[1],"rm");strcpy(order[2],"cat");strcpy(order[3],"write");strcpy(order[4],"fine");strcpy(order[5],"chmod");strcpy(order[6],"ren");strcpy(order[7],"dir");strcpy(order[8],"close");strcpy(order[9],"return");strcpy(order[10],"exit");strcpy(order[11],"df");char command[50],command_str1[10],command_str2[10],command_str3[5],command_str4[3];int i,k,j;int length;initDisk(); //初始化磁盘for(i=0;i<MaxUser;i++) //初始化用户UFD目录文件的头指针{userTable[i].user=(UFD *)malloc(sizeof(UFD));userTable[i].user->next=NULL;}while(1){printf("********************************************\n");printf(" 1、Creat user\n");printf(" 2、login\n");printf("********************************************\n");printf("Please chooce the function key:>");int choice;scanf("%d",&choice);if(choice==1) userCreate();else if(choice==2) userID=login();else printf("您的输入有误,请重新选择\n");while(userID!=-1){fflush(stdin);printf("———————————————————————————————————————\n ");printf(" create-创建格式:create a1 1000 rw,将创建名为a1,长度为1000字节可读可写的文件\n");printf(" rm-删除格式:rm a1,将删除名为a1的文件\n");printf(" cat-查看文件内容格式:cat a1,显示a1的内容\n");printf(" write-写入格式:write a1\n");printf(" fine-查询格式:fine a1 ,将显示文件a1的属性\n");printf(" chmod-修改格式:chmod a1 r,将文件a1的权限改为只读方式\n");printf(" ren-重命名格式:ren a1 b1 ,将a1改名为b1\n");printf(" dir-显示文件格式:dir aaa,将显示aaa用户的所有文件\n");printf(" df-显示磁盘空间使用情况格式:df\n");printf(" close-关闭文件格式:close a1,将关闭文件a1\n");printf(" return-退出用户,返回登录界面\n");printf(" exit-退出程序\n");printf("————————————————————————————————————————\n");printf("please imput your command:>");gets(command);int select;for(i=0;command[i]!=' '&&command[i]!='\0';i++) //command_str1字符串存储命令的操作类型command_str1[i]=command[i];k=i;command_str1[k]='\0';for(i=0;i<commandAmount;i++){if(!strcmp(command_str1,order[i])){select=i;break;}}if(i==commandAmount){printf("您输入的命令有误,请重新输入\n");continue;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++) //commmand_str2字符串存储文件名或用户名command_str2[k]=command[i];command_str2[k]='\0';k=i;switch(select){case 0:for(i=k+1,k=0;command[i]!=' ';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';k=i;j=1;length=0; //初始化文件长度for(i=strlen(command_str3)-1;i>=0;i--) //把字符串转换为十进制{length+=(command_str3[i]-48)*j;j*=10;}for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str4[k]=command[i];command_str4[k]='\0';fileCreate(command_str2,length,command_str4);break;case 1:fileDel(command_str2);break;case 2:fileCat(command_str2);break;case 3:fileWrite(command_str2);break;case 4:fileFine(command_str2);break;case 5:for(i=k+1,k=0;command[i]!=' '&&command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';chmod(command_str2,command_str3);break;case 6:for(i=k+1,k=0;command[i]!='\0';i++,k++)command_str3[k]=command[i];command_str3[k]='\0';fileRen(command_str2,command_str3);break;case 7:fileDir(command_str2);break;case 8:fileClose(command_str2);break;case 9:UFD *p;for(p=userTable[userID].user->next;p!=NULL;p=p->next) //退出用户之前关闭所有打的文件if(p->file->openFlag)p->file->openFlag=false;system("cls");userID=-1;break;case 10:exit(0);break;case 11:diskShow();break;}}}return 0;}void userCreate(){char c;char userName[10];int i;if(used<MaxUser){printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elseuserName[i]=c;printf("%c",c);}userName[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,userName)){printf("\n");printf("该用户名已存在,创建用户失败\n");system("pause");return;}}strcpy(userTable[used].userName,userName);printf("\n");printf("请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elseuserTable[used].password[i]=c;printf("*");}userTable[userID].password[i]='\0';printf("\n");printf("创建用户成功\n");used++;system("pause");}else{printf("创建用户失败,用户已达到上限\n");system("pause");}fflush(stdin);}int login(){char name[10],psw[10];char c;int i,times;printf("请输入用户名:");for(i=0;c=getch();i++){if(c==13) break;elsename[i]=c;printf("%c",c);}name[i]='\0';for(i=0;i<used;i++){if(!strcmp(userTable[i].userName,name))break;}if(i==used){printf("\n您输入的用户名不存在\n");system("pause");return -1;}for(times=0;times<3;times++){memset(psw,'\0',sizeof(psw));printf("\n请输入密码:");for(i=0;c=getch();i++){if(c==13) break;elsepsw[i]=c;printf("*");}printf("\n");for(i=0;i<used;i++){if(!strcmp(psw,userTable[i].password)){printf("用户登录成功\n");system("pause");break;}}if(i==used){printf("您输入的密码错误,您还有%d次输入机会\n",2-times);if(times==2) exit(0);}else break;}fflush(stdin);return i;}void initDisk(){diskHead=(diskNode *)malloc(sizeof(diskNode));diskHead->maxlength=MaxDisk;diskHead->useFlag=0;diskHead->start=0;diskHead->next=NULL;}int requestDist(int &startPostion,int maxLength){int flag=0; //标记是否分配成功diskNode *p,*q,*temp;p=diskHead;while(p){if(p->useFlag==0&&p->maxlength>maxLength){startPostion=p->start;q=(diskNode *)malloc(sizeof(diskNode));q->start=p->start;q->maxlength=maxLength;q->useFlag=1;q->next=NULL;diskHead->start=p->start+maxLength;diskHead->maxlength=p->maxlength-maxLength;flag=1;temp=p;if(diskHead->next==NULL) diskHead->next=q;else{while(temp->next) temp=temp->next;temp->next=q;}break;}p=p->next;}return flag;}void fileCreate(char fileName[],int length,char fileKind[]){//int i,j;time_t rawtime;int startPos;UFD *fileNode,*p;for(p=userTable[userID].user->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName)){printf("文件重名,创建文件失败\n");system("pause");return;}}if(requestDist(startPos,length)){fileNode=(UFD *)malloc(sizeof(UFD));fileNode->file=(fileTable *)malloc(sizeof(fileTable)); //这一步必不可少,因为fileNode里面的指针也需要申请地址,否则fileNode->file指向会出错strcpy(fileNode->file->fileName,fileName);strcpy(fileNode->file->fileKind,fileKind);fileNode->file->maxlength=length;fileNode->file->strat=startPos;fileNode->file->openFlag=false;time(&rawtime);fileNode->file->timeinfo=localtime(&rawtime);fileNode->next=NULL;if(userTable[userID].user->next==NULL)userTable[userID].user->next=fileNode;else{p=userTable[userID].user->next;while(p->next) p=p->next;p->next=fileNode;}printf("创建文件成功\n");system("pause");}else{printf("磁盘空间已满或所创建文件超出磁盘空闲容量,磁盘空间分配失败\n");system("pause");}}void freeDisk(int startPostion){diskNode *p;for(p=diskHead;p!=NULL;p=p->next){if(p->start==startPostion)break;}p->useFlag=false;}void fileDel(char fileName[]){UFD *p,*q,*temp;q=userTable[userID].user;p=q->next;while(p){if(!strcmp(p->file->fileName,fileName)) break;else{p=p->next;q=q->next;}}if(p){if(p->file->openFlag!=true) //先判断是否有进程打开该文件{temp=p;q->next=p->next;freeDisk(temp->file->strat); //磁盘空间回收free(temp);printf("文件删除成功\n");system("pause");}else{printf("该文件已被进程打开,删除失败\n");system("pause");}}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileCat(char fileName[]){int startPos,length;int k=0;UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){startPos=p->file->strat;length=p->file->length;p->file->openFlag=true; //文件打开标记printf("*****************************************************\n");for(int i=startPos;k<length;i++,k++){if(i%50==0) printf("\n"); //一行大于50个字符换行printf("%c",disk[i]);}printf("\n\n*****************************************************\n");printf("%s已被read进程打开,请用close命令将其关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileWrite(char fileName[]){UFD *p,*q;q=userTable[userID].user;int i,k,startPos;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){if(!strcmp(p->file->fileKind,"r")) //判断文件类型{printf("该文件是只读文件,写入失败\n");system("pause");return;}char str[500];printf("please input content:\n");gets(str);startPos=p->file->strat;p->file->openFlag=true; //文件打开标记p->file->length=strlen(str);if(p->file->length>p->file->maxlength){printf("写入字符串长度大于该文件的总长度,写入失败\n");system("pause");return;}for(i=startPos,k=0;k<(int)strlen(str);i++,k++)disk[i]=str[k];printf("文件写入成功,请用close命令将该文件关闭\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileFine(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){printf("********************************************\n");printf("文件名:%s\n",p->file->fileName);printf("文件长度:%d\n",p->file->maxlength);printf("文件在存储空间的起始地址:%d\n",p->file->strat);printf("文件类型:%s\n",p->file->fileKind);printf("创建时间:%s\n",asctime(p->file->timeinfo));printf("********************************************\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void chmod(char fileName[],char kind[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){strcpy(p->file->fileKind,kind);printf("修改文件类型成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileRen(char fileName[],char name[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){while(q->next){if(!strcmp(q->next->file->fileName,name)){printf("您输入的文件名已存在,重命名失败\n");system("pause");return;}q=q->next;}strcpy(p->file->fileName,name);printf("重命名成功\n");system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}void fileDir(char userName[]){UFD *p;int i,k;for(i=0;i<MaxUser;i++){if(!strcmp(userTable[i].userName,userName)){k=i;break;}}if(i==MaxUser){printf("没有找到该用户,请检查输入用户名是否正确\n");system("pause");return;}else{p=userTable[k].user->next;printf("******************************************************************************* *\n");printf("文件名文件长度文件在磁盘的起始地址文件类型创建时间\n");for(;p!=NULL;p=p->next)printf("%s %d %d %s %s",p->file->fileName,p->file->maxlength,p->file->strat,p->file->fileKind,asctime(p->file->timeinfo));printf("******************************************************************************* *\n");system("pause");}}void diskShow(){diskNode *p;int i=0,unusedDisk=0;printf("***************************************************************************\n");printf(" 盘块号起始地址容量(bit) 是否已被使用\n");for(p=diskHead;p!=NULL;p=p->next,i++){if(p->useFlag==false) unusedDisk+=p->maxlength;printf(" %d %d %d %d \n",i,p->start,p->maxlength,p->useFlag);}printf("***************************************************************************\n");printf("磁盘空间总容量:512*1024bit 已使用:%dbit 末使用:%dbit\n\n",MaxDisk-unusedDisk,unusedDisk);system("pause");}void fileClose(char fileName[]){UFD *p,*q;q=userTable[userID].user;for(p=q->next;p!=NULL;p=p->next){if(!strcmp(p->file->fileName,fileName))break;}if(p){p->file->openFlag=false;printf("%s文件已关闭\n",p->file->fileName);system("pause");}else{printf("没有找到该文件,请检查输入的文件名是否正确\n");system("pause");}}运行结果视图:(略)。

操作系统课设报告文件管理系统

操作系统课设报告文件管理系统

目录一.课程设计目的及要求 (1)二.相关知识 (2)三题目分析 (3)四.概要设计 (4)五.代码及流程 (5)六.运行结果 (20)七.设计心得 (23)八.参考文献 (24)一.课程设计目的及要求深入了解文件管理系统,初步掌握文件管理系统的实现方法。

用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

编写一程序,模拟一个简单的文件管理系统。

树型结构,目录下可以是目录,也可以是文件。

在此文件管理系统,可实现的操作有:改变目录:格式:cd <目录名>显示目录:格式:dir <目录名>创建目录:格式:md <目录名>删除目录:格式:rd <目录名>新建文件:格式:edit <文件名>删除文件:格式:del <文件名>退出文件系统:exit二.相关知识1.文件结构体struct FileNode{char filename[FILENAME_LEN];//文件名/目录名int isdir;//目录文件识别标志int i_nlink;//文件的链接数int adr;//文件的地址struct FileNode *parent, *child;//指向父亲的指针和指向左孩子的指针struct FileNode *sibling_prev, *sibling_next;//指向前一个兄弟的指针和指向//后一个兄弟的指针.};整个文件系统采用二叉树型存储结构,初始化文件树如下:图 2-1 初始目录树2.所使用函数及其功能int Main(); //主函数void Init();//初始化文件树int ParseCommand();//接受输入的命令并把其分解成操作名和路径文件名void ExecuteCommand();//执行命令,分别执行cd,edit,md,del,rd, dir,exit命令int cdComd(); //改变目录功能处理int editComd();//处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑int mdComd(); //创建目录int delComd();//处理del命令,即删除指定文件,不存在是给出错误信息int dirComd();//处理dir命令,显示目录int rdComd(); //删除目录int FindFilename(char Para2[]);//查找文件名struct FileNode* CreateFileNode(char filename[],int isdir,int i_nlink);//创建结点int GetInput(char* buffer,unsigned int buffer_len);//获取输入3.所使用的变量struct FileNode *cp, *tp, *root;// *cp, *tp, *root是根目录节点char path[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径charPara1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];//para1数组存储输入的命令,para2数组存储输入的文件名char filename[FILENAME_LEN],tmp;unsigned int i,j;三题目分析1.文件系统采用二叉树型存储结构,结点结构如下:struct FileNode{char filename[FILENAME_LEN];//文件名/目录名int isdir;//目录、文件的识别标志(0为文件,1为目录)int i_nlink;//文件的链接数//int adr;//文件的地址struct FileNode *parent, *child;//指向父亲的指针和指向左孩子的指针struct FileNode *sibling_prev, *sibling_next;//指向前一个兄弟的指针和指向后一个兄弟的指针.};2.目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开3.功能具体描述:改变目录:改变当前工作目录,目录不存在时给出出错信息显示目录:显示指定目录下或当前目录下所有文件和一级目录(选做:带/s参数的dir命令,显示所有子目录)创建目录:在指定路径或当前路径下创建指定目录。

《操作系统原理教程》电子教案 第4章 文件管理

《操作系统原理教程》电子教案  第4章  文件管理

(6)按照文件的内容分类
– 普通文件、目录文件、特殊文件
5.文件系统模型
文件系统是指含有大量文件及其属性说 明的,对文件进行操纵和管理的,向用 户提供使用接口的软件集合。图4-1表示 了文件系统的模型。 它分为三个层次

– 最低层是对象及其属性说明; – 中间层是对对象进行操纵和管理的软件集合; – 最高层是文件系统提供给用户的接口。
4.2.2 文件的物理结构
1.文件物理结构的概念 2.文件物理结构的形式 3.文件的访问方式

1.文件物理结构的概念
文件的物理结构,又称为文件的存储结构,它 是指文件在外存上存储时的组织结构。 文件的物理结构与存储介质的物理特性及用户 对文件的访问方式有关。 文件的物理结构通常划分为大小相等的物理块, 也称为物理记录。它是文件分配及传输信息的 基本单位。物理记录的大小与物理设备有关, 与逻辑记录的大小无关。
4.文件类型

(1)按性质和用途分类
– 系统文件、用户文件、库文件
(2)按文件中的数据形式分类
– 源文件、目标文件


(3)按文件的存取控制属性分类
– 只执行文件、只读文件、读写文件
(4)按文件的逻辑结构分类
– 有结构文件、无结构文件
(5)按文件的物理结构分类
– 顺序文件、链接文件、索引文件
4.1 文件管理概述
4.1.1 文件管理的主要任务 4.1.2 文件管理的主要功能 4.1.3 文件系统的基本概念

4.1.1 文件管理的主要任务
文件管理,即构成一个文件系统,负责管理在 外存上存放的文件,并把对文件的存取、共享 和保护等手段提供给操作系统和用户。 文件管理的主要目标是提高外存储空间的利用 率。 它的主要任务是对用户文件和系统文件进行管 理,方便用户使用,并保证文件的安全性。

操作系统课程设计文件管理二级文件系统

操作系统课程设计文件管理二级文件系统

本文档分别包含linux和windows两套程序目录一、课程设计的目的..........................二、课程设计的内容及要求...................内容..........................................要求..........................................三、实现原理.................................四、关键算法实现流程图 .....................流程图........................................关键算法......................................五、软件运行环境及限制 .....................六.结果输出及分析..........................七.心得体会.................................八.参考文献.................................一.课程设计的目的本课程设计是学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让我更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强了我的动手能力。

二.课程设计的内容及要求内容:为LINUX 设计一个简单的二级文件系统。

要求做到以下几点:1、可以实现下列几条命令(至少4条)。

Login 用户登录Dir 列文件目录Create 创建文件Delete 删除文件Open 打开文件Close 关闭文件Read 读文件Write 写文件2、列目录时要列出文件名、物理地址、保护码和文件长度。

3、源文件可以进行读写保护。

从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:1、鼓励并优先个人独立选题设计,可从下面设计题目中选择,也可以自拟相关题目;如要合作,每组最多两名同学,且设计文档不能相同;2、可以在我们实验课最后布置的实验设计基础上进行完善和改进,但不能相同。

操作系统课程设计文件系统

操作系统课程设计文件系统

操作系统课程设计:文件系统一、引言文件系统是操作系统中的一个重要组成部分,负责管理计算机存储设备上的文件和目录。

一个高效可靠的文件系统对于操作系统和用户来说都至关重要。

在操作系统课程中,设计一个文件系统是一项重要的任务,可以帮助学生深入了解文件系统的原理和实现细节。

本文档将介绍一个简单的文件系统设计,旨在帮助初学者理解文件系统的基本概念和工作原理。

我们将首先介绍文件系统的基本概念,然后讨论文件系统的设计思路和关键组成部分。

最后,我们将讨论如何实现和测试文件系统。

二、文件系统的基本概念文件系统是操作系统提供的一种存储管理机制,用于将文件组织成有层次的结构并提供对文件的访问和管理。

在一个文件系统中,文件被组织成目录(或文件夹)的层次结构,用户可以使用文件路径来访问文件和目录。

文件系统通常提供以下功能: - 文件和目录的创建、删除和重命名 - 文件和目录的读取和写入 - 文件和目录的权限管理 - 文件的共享和保护 - 文件的存储管理三、设计思路在设计文件系统时,需要考虑以下几个关键方面:1. 文件系统的组织结构文件系统可以采用不同的组织结构,常见的包括层次结构、网络结构和日志结构。

在设计文件系统时,需要根据具体需求选择合适的结构。

2. 文件和目录的管理文件系统需要提供对文件和目录的管理功能,包括创建、删除、重命名和移动等操作。

此外,还需要支持文件和目录的权限管理,确保只有授权用户可以进行相应操作。

3. 文件的存储管理文件系统需要负责将文件存储在磁盘或其他存储设备上,并提供高效的读写操作。

存储管理的关键是如何将文件划分为适当大小的块并将它们存储在存储设备上。

4. 文件的共享和保护文件系统需要支持文件的共享和保护。

共享可以使多个用户同时访问同一文件,保护则确保只有合法用户可以进行读写操作。

四、文件系统的关键组成部分一个典型的文件系统通常由以下几个关键组成部分构成:1. 文件控制块(FCB)文件控制块是文件系统中一个重要的数据结构,用于记录文件的相关信息,包括文件名、大小、权限和存储位置等。

操作系统文件管理系统 课程设计

操作系统文件管理系统 课程设计

操作系统文件管理系统课程设计
操作系统文件管理系统课程设计一般包括以下内容:
1. 基本概念和原理:介绍文件管理系统的基本概念和原理,包括文件、目录、文件系统、文件操作等。

2. 设计需求分析:明确设计需求,包括基本功能、用户需求、性能要求等。

3. 文件存储结构的设计:设计文件存储结构,包括文件分配方式、文件存储结构、文件目录结构、文件保护等。

4. 文件操作的实现:实现文件的创建、打开、读写、删除等基本操作,以及文件的复制、移动、重命名等高级操作。

5. 目录管理的实现:实现目录的创建、删除、重命名等操作,以及目录的遍历和搜索等功能。

6. 文件系统的实现:实现文件系统的格式化、挂载、卸载等操作,以及文件系统的安全性和可靠性保障。

7. 用户界面的设计:设计用户界面,包括命令行界面和图形界面,以方便用户进行文件管理操作。

8. 系统测试和调试:对系统进行测试和调试,包括单元测试、集成测试、性能测试等,以确保系统的稳定性和可靠性。

9. 报告撰写和展示:根据课程设计的要求,编写设计报告和展示文稿,介绍系统的设计思路、实现方法和成果。

以上是一个基本的操作系统文件管理系统课程设计的内容,具体可以根据教师的要求和课程的安排进行适当调整和扩展。

操作系统课程方案二文档管理系统

操作系统课程方案二文档管理系统

青 岛 科 技 大 学操 作 系 统 课 程 设 计学生班级__________________________ 学生学号__________________________ 学生姓名________________________________年 ___月 ___日操作系统课程设计(二级文件管理系统>一、课程设计要求从所给题目中选择一个,分析设计要求,给出解决方案,建立必要的数据结构,设计总体流程<包括界面),详细设计必要的算法,测试结果。

基于Windows 或Linux 操作系统都可以,编程语言不限。

二、设计目的深入了解文件管理系统,初步掌握文件管理系统的实现方法。

三、选择题目设计一个简单的二级文件系统设计内容:编写程序模拟实现一个简单的文件管理系统,设计一个较实用的用户界面,方便用户使用。

设计要求:提供以下相关文件操作: <1)具有login (用户登录>0908010209Angelo 20186 26 计算机092<2)系统初始化<建文件卷、提供登录模块)<3)文件的创建: create<4)文件的打开:open<5)文件的读:read<6)文件的写:write<7)文件关闭:close<8)删除文件:delete<9)创建目录<建立子目录):mkdir<10)列出文件目录:dir<11)退出:loyout四、程序设计(1)开发环境Ubuntu 11.10 GCC<GNU Compiler Collection,GNU编译器套装)C语言编程(2)设计思想文件管理仅针对相应用户,用户注册时,自动分配对应的文件空间,该用户所有的文件保存在该用户空间下。

用户只有对自己空间中的目录或文件具有权限。

文件管理系统,模拟Linux文件管理指令格式,模拟实现ls、cat、rm、cd、mkdir等基础文件管理指令,并具有较明朗的操作界面。

操作系统课程设计---文件管理系统设计

操作系统课程设计---文件管理系统设计

课程设计任务书计算机科学与技术专业年级班一、设计题目文件管理系统设计二、主要内容设计一个简单的文件管理系统来模拟文件操作命令的执行三、具体要求设计和调试一个简单的文件管理系统来模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。

具体要求如下:⑴设计一个支持n个用户的文件系统,每个用户可拥有多个文件;⑵采用二级或二级以上的多级文件目录管理;⑶对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写”等;⑷系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。

⑸通过键盘(或鼠标)使用该文件系统,系统应显示操作命令的执行结果。

四、进度安排2012-9-3-----2012-9-6 确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;2012-9-6-----2012-9-12 编写程序代码并调试,再将调试通过的各个子模块进行集成调试;2012-2-12----2012-9-16 归纳文档资料,完成课程设计说明书,参加课程设计答辩五、完成后应上交的材料在课程设计完成后需要提交的成果和有关文档资料包括:1、课程设计的说明书。

2、课程设计有关源程序及可运行程序(光盘或电子邮件)。

六、总评成绩:指导教师签名日期年月日系主任审核日期年月日一、本设计目的及基本思想本课程设计目的是实现树型目录结构文件系统,在实现过程中利用了二叉树,其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。

目录下各子节点用兄弟指针连接起来。

文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。

文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。

1.课程设计报告-文件管理系统_计算机操作系统

1.课程设计报告-文件管理系统_计算机操作系统

第一部分概述1。

1 系统开发背景1.1。

1 文件系统的意义在现代计算机系统中,要用到大量的程序和数据,由于内存容量有限,且不能长期保存,故而平时总是把他们以文件的形式存放在外存中,需要时可随时将它们调入内存。

如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,还必须能保持数据的安全性和一直性。

显然,这是用户所不能胜任的工作.取而代之的,便是在操作系统中增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取,共享和保护等手段提供给用户.这不仅方便了用户,保证了文件的安全性,还有效的提高了系统资源利用率。

1.1.2 开发背景(1)所设计软件名称:文件管理系统(2)本软件的提出者:(3)本软件的设计者:1。

1。

3 软件开发工具(1)MICROSOFT WINDOWS 2000(2)BORLAND C++ BUILDER 6。

01。

1。

4 软件开发技术(1)C++程序设计(2)软件工程开发过程各阶段分析(3)1。

2 系统功能介绍及目标1.2。

1 系统实现功能(1)多用户、多级目录(注:本设计最多10个用户,实现3级目录).设置目录MFD和用户文件目录UFD,另外还为打开文件设置了运行文件目录AFD.(2)至少有10个实用的文件操作命令(注:本设计可实现创建和删除目录,创建和删除文件,以及打开和关闭文件等功能).(3)设计一个既简单又实用的用户界面.第二部分需求分析2.1 项目概述及数据流图2。

1。

1 系统的一般概述使用高级语言编写简单的文件系统,模拟文件管理的工作过程。

实现多用户文件管理,允许创建和删除文件,对文件属性设置保护.采用多级文件目录。

2。

1.2 系统的功能数据流图层次框图系统顶层数据流图系统二层数据流图2。

2 功能需求分析2.2.1 功能划分用户管理功能身份验证功能目录管理功能文件管理功能文件属性管理功能帮助功能2。

2。

2 功能描述(1)用户管理功能允许用户进行注册,管理不同用户.允许注销用户,即删除该用户。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统原理课程设计文件管理系统院系:计算机学院三系班级:计软05–1班姓名:韩宇学号:35号指导教师:益民2007年7 月4 日操作系统原理课程设计任务书一、题目:文件系统管理二、设计要求(1)由鲁建成,韩宇,肖鹏完成设计与实现。

(2)查阅相关资料,自学具体课题中涉及到的新知识。

(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。

(4)所设计的程序应有输入、输出。

一. (5)按要求写出课程设计报告,并于设计结束后1周提交。

其主要容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、需求分析、概要设计、详细设计、软件的调试、总结、启谢、附录:带中文注释的程序清单、参考文献。

报告一律用 A4 纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值” 18 磅,首行缩进 2 字符。

总体设计应配合软件总体模块结构图来说明软件应具有的功能。

详细设计应用传统或 N-S 流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。

三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200 行有效程序行左右,不得抄袭。

四、课程设计工作计划2007 年 6 月 18 日,指导教师讲课,学生根据题目准备资料;2007 年 6 月 19 日,进行总体方案设计;2007 年 6 月 20 日~ 2007 年 6 月 25 日,完成程序模块并通过独立编译;2007 年 6 月 26 日~ 2007 年 6 月 27 日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2007 年 6 月 27 日~ 2007 年 6 月 29 日,验收、撰写报告;2007 年 6 月 29 日下午,验收或总结。

指导教师签章:教研室主任签章操作系统原理课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩:课程设计验收成绩:课程设计报告成绩:课程设计总成绩:指导教师签章2007年7月10日目录一概述------------------------------------------------------------5二需求分析------------------------------------------------------71)问题获取2)分析三概要设计------------------------------------------------------8四详细设计------------------------------------------------------91)具体功能概述2)程序流程图3)程序代码五程序的调试与运行结果说明------------------------------32六用户使用说明------------------------------------------------351)引言2)功能介绍七启谢-------------------------------------------------------------36八参考资料-------------------------------------------------------36一概述1.课程设计的目的1.理解重要数据结构的意义2.掌握文件系统的工作原理3.通过本次课程设计加深文件系统部功能及部实现的理解2.课程设计的要求1.需要的基本知识:文件:一组带标志的在逻辑上有完整意义的信息项的序列,这个标识为文件名。

文件系统:操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新。

提供安全可靠的共享和保护手段,并且方便用户使用。

2.技能:具有用 C 语言编程的能力,懂得文件系统调用处理的算法及一些操作系统文件系统的实现的基本思想。

3.尚未掌握的知识点:高速缓存管理和磁盘管理算法4.参阅操作系统原理书籍中文件管理的相关知识。

5.老师提出的要求:在理解文件系统的层次结构,掌握高速缓存管理和磁盘管理的基本思想和算法的基础上,掌握文件系统的系统调用处理算法和运用,分析流行操作系统文件系统的实现的基本思想,尝试设计简单的文件系统3.课程设计的主要设计思想在任一 OS下,建立一个大文件,把它假想成一盘,在其中实现一个简单的模拟 UNIX(LINUX)文件系统。

本次文件系统具有以下的功能:1、初始化2、建立文件(需给出文件名,文件长度)3、建立子目录4、打开文件(显示文件所占的盘块)5、删除文件6、删除目录7、显示目录(即显示目录下的信息,包括文件、子目录等)8、显示整个系统信息【关键词】文件管理目录管理操作系统 C 语言二需求分析1)问题获取我们以学生为调查对象。

模拟询问了若干问题,这些问题的提出和解决有助项目的开发和方向定位。

问题如下:1)有关用户操作方面的相关问题#是否需要使用者的登录登出操作?#允许用户执行哪些操作?#各项操作的提示操作是设置在软件界面上还是在菜单里?#允许用户对文件的操作有哪些?2)有关技术支持方面的相关问题# 用户使用的是那种操作系统?(WindowsXP / Linux/苹果?)#是否使用数据库的相关技术?#是否向用户提供相关的技术文档?2)分析经过相关的问题获取,我们分析了本项目的相关需求。

本项目的名称:简易文件系统本系统的使用人员:所有使用计算机的人员本项目的开发工具:WinTc数据库设计:无界面设计:命令行提示方式的程序在用户操作方面,运行本系统前不需要用户的登录操作,运行后可以直接进入操作界面,用户可以直观的使用本程序。

用户可以对文件做以下的操作:文件的建立,删除,查找,文件目录的相关管理,各项操作应可以直接操作,不会有任何的限制。

用户大多使用的是 WindowsXP操作系统,而且很多的用户安装了 WinTc 软件,这样我们以WinTc 编写的程序用户可以直接使用三概要设计本程序的功能模块图如图所示:简易的文件系统创创查查删删建建看看除除在此文件模拟系统上可以实现以下操作:#创建目录: md + 空格 + 目录名,在指定路径下创建指定的目录,如果没有指定路径,则在当前目录下创建指定目录。

对于重名的目录给与错误提示。

# 创建文件: vi +空格 +文件名 + 文件长度,创建一个指定名字的新文件,即在目录中增加一项,对于重名的文件给与错误提示。

# 删除目录: del +空格 +目录名,删除指定的目录及此目录下的文件和子目录。

# 删除文件: del +空格 +文件名,删除指定的文件。

#查看目录: cd + 空格 + 目录名,显示指定目录下的全部文件和一级子目录,如果没有指定目录名,则显示当前目录下的相应容。

# 查看文件: cat +空格+文件名,显示指定的文件,如没有此文件,则显示错误提示。

# 键入 quit退出文件系统。

四详细设计1)具体功能概述初始化,查看当前目录文件列表,查看文件,查看系统信息,创建目录、文件,删除目录、文件,进入当前目录的指定目录,返回上一级目录,显示帮助命令和退出文件模拟 12 项功能。

2)程序流程图4.2.1 Format()1.超级块初始化图 3.2.1.12.信息初始化i<50super_block.free[i]=i;super_block.stack[i]=50+i;图 3.2.1.2i<640j<1003.存储空间初始化i_node[i].file_address[j]=-1i_node[i].file_length=-1;i_node[i].file_style=-1;图 3.2.1.34.将空闲块的信息用成组的方法写进每组的最后一个块中图 3.2.1.4i<204494.2.2Callback(int length)(i+1)%50==0是否k=i+1;j<50是k<20450否memory[i].free[j]=k;memory[i].memory[i].n++; free[j]=-1k++;memory[i].a=0;continue;j<50memory[i].free[j]=-1;memory[i].n=0;图 3.2.2I=length-1;i>=0k=physic[i];m=49-super_block.n;是super_block.n==50否j<50memory[k].free[j]=super_block.free[j];super_block.n=0;memory[k].n=50;4.2.3 Allot(int length)memory[k].a=0;是m==-1否m=49;super_block.free[m]=physic[i];super_block.n++;图 3.2.3i<lengthk=50-super_block.n;m=super_block.free[k];p=super_block.free[49];是m==-1||memory[p].a==1否printf(" 内存不足 , 不能够分配空间 \n");callback(length);super_block.n==1是否emory[m].a=1;physic[i]=m;super_block.n=0;4.2.4create_file(char filename[],int length)j<memory[m].nsuper_block.free[j]=memory[m].free[j];super_block.n++;continue;physic[i]=m;memory[m].a=1;uper_block.n--图图 i<6403.2.strcmp(filename,root[i].是 file_name)==0 否 printf(" 文件已经存在,不允许建立重名的文件 ")i<640是root[i].i_num==-1否strcpy(root[i].file_name,filename);strcpy(root[i].dir_name,cur_dir);i_node[i].filestyle=style;i_node[i].file_length=length;allot(length);j<lengthi_node[i].file_address[j]=physic[j];break;4.2.5del_file(char filename[])图 3.2.5I<640是strcmp(filename,root[i].file_name)==0否4.2.6del_dir(char filename[])k=root[i].i_num;j<i_node[k].file_length printf(" 不存在这个文件 \n");physic[j]=i_node[k].file_address[j];callback(i_node[k].file_length);j<100i_node[k].file_address[j]=-1;strcpy(root[i].file_name,"");root[i].i_num=-1;strcpy(root[i].dir_name,"");I_node[k].file_length=-1;i_node[k].file_style=-1;图 3.2.6i<640k=root[i].i_num;strcmp(root[i].file_name,filename)==0&& strcmp(cur_dir,filename)!=0 && (i_node[k].file_style)==0j<6404.2.7void display_curdir()strcmp(filename,root[j].是 dir_name)==0 否 printf(" 这个不是目录文printf(" 目录 del_file(file件或者不存在这个目录不为空不能name);或者你要删除的是直接删除 ")当前目录\n");图 3.2.7I<6403.2.8display_dir(charstrcmp(curfilename[])dir,root[i].dir_name)==0是否k=root[i].i_num;printf("\t\t %s\t",root[i].file_name); printf("\t%d\t",i_node[k].file_style);printf("%d\t",i_node[k].file_length);printf("%s\n",root[i].dir_name);是图 3.2.8I<640否k=root[i].i_num;strcmp(filename,root[i].file_name)==0)printf(" 没有这个目录 \n");&& (i_node[k].file_style==0)是否strcpy(cur_dir,filename);4.2.9void open_file(char filename[]是i<640图 3.2.93)程序代码:k=root[i].i_num;/* HELLO.C -- Hello, world */strcmp(filename,root[i].file_name)==0&& (i_node[k].file_style==1)#include "stdio.h"否printf(" 没有这个文件是#include <stdlib.h>或者这个文件不是正规文件#include <conio.h>printf("\t\t %s\t",root[i].file_name);printf("\t%d\t",i_node[k].file_style);#include <string.h>printf("%d\t",i_node[k].file_length);printf("%s\n",root[i].dir_name);int physic[300];/*文件地址缓冲区 */printf("\t\t文件占用的物理地址 \n");int style=1; /*文件的类型 */j<i_node[k].file_lengthchar cur_dir[10]="c";/*当前目录*/printf("%d",i_node[k].file_address[j]);struct command{char [10];}cmd[12];struct block{int n;/*空闲的盘快的个数*/int free[50]; /*存放空闲盘快的地址*/int a;/*模拟盘快是否被占用*/}memory[200];struct block_super{int n;/*空闲的盘快的个数*/int free[50]; /*存放进入栈中的空闲块*/int stack[50]; /*存放下一组空闲盘快的地址*/}super_block;struct node/* i结点信息*/{否\n");int file_style; /* i结点文件类型*/int file_length; /* i结点文件长度*/int file_address[100]; /* i结点文件的物理地址*/ } i_node[64];struct dir/*目录项信息*/{char file_name[10]; /*文件名*/int i_num; /*文件的结点号*/char dir_name[10]; /*文件所在的目录*/} c[64];void format() /*格式化*/{int i,j,k;super_block.n=50;for(i=0;i<50;i++) /*超级块初始化*/{super_block.free[i]=i; /*存放进入栈中的空闲块*/ super_block.stack[i]=50+i; /*存放下一组的盘块*/ }for(i=0;i<64;i++) /* i结点信息初始化*/{for(j=0;j<100;j++){i_node[i].file_address[j]=-1;/*文件地址*/}i_node[i].file_length=-1; /*文件长度*/i_node[i].file_style=-1; /*文件类型*/}for(i=0;i<64;i++) /*根目录区信息初始化*/{strcpy(c[i].file_name,"");c[i].i_num=-1;strcpy(c[i].dir_name,"");for(i=0;i<200;i++) /*存储空间初始化*/{memory[i].n=0;/*必须有这个*/memory[i].a=0;for(j=0;j<50;j++){memory[i].free[j]=-1;}}for(i=0;i<200;i++) /*将空闲块的信息用成组的方法写进每组的最后一个块中 */{/*存储空间初始化*/if((i+1)%50==0){k=i+1;for(j=0;j<50;j++){if(k<200){memory[i].free[j]=k;/*下一组空闲地址*/memory[i].n++; /*下一组空闲个数注意在memory[i].n++之前要给其赋初值 */k++;}else{memory[i].free[j]=-1;}}memory[i].a=0; /*标记为没有使用*/continue; /*处理完用于存储下一组盘块信息的特殊盘块后,跳过本次循环 */}for(j=0;j<50;j++){memory[i].free[j]=-1;memory[i].n=0;}printf("已经初始化完毕 \n");printf("欢迎进入 UNIX文件模拟系统!!!\n\n");}void write_file(FILE *fp) /*将信息读入系统文件中*/ {int i;fp=fopen("system","wb");for(i=0;i<200;i++){fwrite(&memory[i],sizeof(struct block),1,fp);}fwrite(&super_block,sizeof(struct block_super),1,fp);for(i=0;i<64;i++){fwrite(&i_node[i],sizeof(struct node),1,fp);}for(i=0;i<64;i++){fwrite(&c[i],sizeof(struct dir),1,fp);}fclose(fp);}void read_file(FILE *fp) /*读出系统文件的信息*/{int i;fp=fopen("system","rb");for(i=0;i<200;i++){fread(&memory[i],sizeof(struct block),1,fp);}fread(&super_block,sizeof(struct block_super),1,fp);for(i=0;i<64;i++){fread(&i_node[i],sizeof(struct node),1,fp);}for(i=0;i<64;i++){fread(&c[i],sizeof(struct dir),1,fp);}fclose(fp);}void callback(int length) /*回收磁盘空间*/{int i,j,k,m,q=0;for(i=length-1;i>=0;i--){k=physic[i]; /*需要提供要回收的文件的地址*/m=49-super_block.n; /*回收到栈中的哪个位置*/if(super_block.n==50) /*注意当super_block.n==50时m=-1;的值*/{/* super_block.n==50的时候栈满了,要将这个栈中的所有地址信息写进下一个地址中*/for(j=0;j<50;j++){memory[k].free[j]=super_block.free[j];}super_block.n=0;memory[k].n=50;}memory[k].a=0;if(m==-1){m=49;/*将下一个文件地址中的盘块号回收到栈底中,这个地址中存放着刚才满栈的地址的信息*/super_block.free[m]=physic[i]; /*将下一个文件地址中的盘块号回收到栈中 */super_block.n++;}}void allot(int length) /*分配空间*/{int i,j,k,m,p;for(i=0;i<length;i++){k=50-super_block.n; /*超级块中表示空闲块的指针*/m=super_block.free[k]; /*栈中的相应盘块的地址*/p=super_block.free[49]; /*栈中的最后一个盘块指向的地址*/if(m==-1||memory[p].a==1) /*检测是否还有下一组盘块*/{printf("存不足 , 不能够分配空间 \n");callback(length);break;}if(super_block.n==1){memory[m].a=1; /*将最后一个盘块分配掉*/physic[i]=m;super_block.n=0;for(j=0;j<memory[m].n;j++) /*从最后一个盘块中取出下一组盘块号写入栈中 */{super_block.free[j]=memory[m].free[j];super_block.n++;}continue; /*要跳过这次循环,下面的语句在IF 中已经执行过 */ }physic[i]=m; /*栈中的相应盘块的地址写进文件地址缓冲区*/ memory[m].a=1;super_block.n--;}void create_file(char filename[],int length) /*创建文件*/{int i,j;for(i=0;i<64;i++){if(strcmp(filename,c[i].file_name)==0){printf("文件已经存在,不允许建立重名的文件\n");return;}}for(i=0;i<64;i++){if(c[i].i_num==-1){c[i].i_num=i;strcpy(c[i].file_name,filename);strcpy(c[i].dir_name,cur_dir); /*把当前目录名给新建立的文件*/i_node[i].file_style=style;i_node[i].file_length=length;allot(length);for(j=0;j<length;j++){i_node[i].file_address[j]=physic[j];}break;}}}void create_dir(char filename[]) /*创建目录*/{style=0;/* 0代表文件类型是目录文件*/create_file(filename,4);style=1;/*用完恢复初值,因为全局变量,否则*/void del_file(char filename[]) /*删除文件*/{int i,j,k;for(i=0;i<64;i++){if(strcmp(filename,c[i].file_name)==0){k=c[i].i_num;for(j=0;j<i_node[k].file_length;j++){physic[j]=i_node[k].file_address[j];}callback(i_node[k].file_length); /*调用回收函数*/for(j=0;j<100;j++) /*删除文件后要将文件属性和目录项的各个值恢复初值 */{i_node[k].file_address[j]=-1; /*地址恢复初值*/}strcpy(c[i].file_name,""); /*文件名恢复初值*/c[i].i_num=-1; /*目录项的I结点信息恢复初值*/strcpy(c[i].dir_name,""); /*目录项的文件目录信息恢复初值*/i_node[k].file_length=-1; /*文件长度恢复*/i_node[k].file_style=-1; /*文件类型恢复初值*/break;}}if(i==64){printf("不存在这个文件 \n");}}void del_dir(char filename[]) /*删除目录需要判断目录下时候为空 , 不为空就不删除*/int i,j,k;for(i=0;i<64;i++)/*还要加条件判断要删除的目录是不是当前目录*/{k=c[i].i_num;/*找到目录名字*/if(strcmp(c[i].file_name,filename)==0&& strcmp(cur_dir,filename)!=0 && (i_node[k].file_style)==0 ){for(j=0;j<64;j++){if(strcmp(filename,c[j].dir_name)==0){printf("目录不为空不能直接删除\n");break;}}if(j==64){del_file(filename);break;}break;}}if(i==64){printf("这个不是目录文件或者不存在这个目录,或者你要删除的是当前目录 \n");}}void display_curdir()/*显示当前目录下的文件列表*/{int i,k;printf("\t\t文件名字文件类型文件长度所属目录\n");for(i=0;i<64;i++){if(strcmp(cur_dir,c[i].dir_name)==0) /*查询文件中所在目录信息和当前目录信息相同的数据*/{k=c[i].i_num;printf("\t\t %s\t",c[i].file_name); /*文件名*/printf("\t%d\t",i_node[k].file_style); /*文件的类型*/printf("%d\t",i_node[k].file_length); /*文件的长度*/printf("%s\n",c[i].dir_name); /*文件所在的目录*/}}}void display_dir(char filename[]) /*进入指定的目录*/{int i,k;for(i=0;i<64;i++){k=c[i].i_num;/*判断文件类型是不是目录类型*/if((strcmp(filename,c[i].file_name)==0)&& (i_node[k].file_style==0)){strcpy(cur_dir,filename); /*将要进入的指定目录设置为当前目录赋值不要反了 strcpy(目的,源) */break;}}if(i==64){printf("没有这个目录 \n");}}void open_file(char filename[])/*打开文件*/{int i,j,k;printf("\t\t文件名字文件类型文件长度所属目录\n");for(i=0;i<64;i++){k=c[i].i_num;if(strcmp(filename,c[i].file_name)==0&& (i_node[k].file_style==1)){printf("\t\t %s\t",c[i].file_name); /*文件名*/printf("\t%d\t",i_node[k].file_style); /*文件的类型*/printf("%d\t",i_node[k].file_length); /*文件的长度*/printf("%s\n",c[i].dir_name); /*文件所在的目录*/printf("\t\t文件占用的物理地址 \n");for(j=0;j<i_node[k].file_length;j++) /*显示物理地址*/{printf("%d ",i_node[k].file_address[j]); /*文件具体占用的盘块号 */}printf("\n");break;}}if(i==64){printf("没有这个文件或者这个文件不是正规文件\n");}}void back_dir()/*返回上一级目录*/{int i,k;for(i=0;i<64;i++)/*查询和当前目录名相同的目录文件名*/{k=c[i].i_num;if(strcmp(cur_dir,c[i].file_name)==0 && (i_node[k].file_style==0)){strcpy(cur_dir,c[i].dir_name); /*将查询到的目录文件名所在的目录赋值给当前目录*/}}}void display_sys()/*显示系统信息(磁盘使用情况)*/{int i,m,k=0;for(i=0;i<200;i++){if(memory[i].a==0)k++;}m=200-k;printf("空闲的盘块数是: \t");printf("%d\n",k);printf("使用的盘块数是: \t");printf("%d\n",m);}void help()/*显示帮助信息 */{printf("注意:创建的文件长度 < 300\n\n"); /*说明文件 */printf("0.初始化 **************************format\n");printf("1.查看当前目录文件列表 ************dir\n");printf("2.查看文件 ************************cat-----(cat +空格 +文件名 ) \n");printf("3.查看系统信息 ********************ls\n");printf("4.创建目录 ************************md------(md +空格 +目录名 ) \n");printf("5.创建文件 ************************vi------(vi +空格 +文件名 + 文件长度 ) \n");printf("6.删除文件 ************************del-----(del +空格 +文件名 ) \n");printf("7.删除目录 ************************deldir--(del +空格 +目录名 )\n");printf("8.进入当前目录下的指定目录 ********cd--------(cd +空格+ 目录名 )\n");printf("9. 返回上一级目录 ******************rd \n");printf("10. 显示帮助命令 *******************help \n");printf("11. 退出文件模拟 *******************quit \n"); }void main()/*主函数*/{char tmp[10],[10],tmp1[10],k;struct command tmp2[10];int i, j=0,p,len=0;FILE *fp;help();strcpy(cmd[0].,"format"); /*将各个命令存进命令表*/strcpy(cmd[1].,"dir");strcpy(cmd[2].,"cat");strcpy(cmd[3].,"ls");strcpy(cmd[4].,"md");strcpy(cmd[5].,"vi");strcpy(cmd[6].,"del");strcpy(cmd[7].,"deldir");strcpy(cmd[8].,"cd");strcpy(cmd[9].,"rd");strcpy(cmd[10].,"help");strcpy(cmd[11].,"quit");if((fp=fopen("system","rb"))==NULL) /*判断系统文件是否存在*/{printf("can not open file\n");printf("format the disk Y / N \n");scanf("%c",&k);if(k=='y')format();}else{read_file(fp);/*读取系统文件的容*/}while(1){j=0;/*必须重新给恢复0 否则出错 */strcpy(tmp,cur_dir);while(strcmp(tmp,"c")!=0){for(i=0;i<64;i++){p=c[i].i_num;if(strcmp(tmp,c[i].file_name)==0 && (i_node[p].file_style==0)){strcpy(tmp2[j].,tmp);j++;strcpy(tmp,c[i].dir_name);}}}strcpy(tmp2[j].,tmp);for(i=j;i>=0;i--){printf("%s/",tmp2[i].);}scanf("%s",);/*输入命令并且查找命令的相关操作*/for(i=0;i<12;i++){if(strcmp(,cmd[i].)==0){p=i;break;}}if(i==12)/*如果没有这个语句以后输入的命令都和第一次输入的效果一样 */{p=13; /*随便的一个值*/}switch(p){case 0: format();/*初始化*/break;case 1: display_curdir(); /*查看当前目录下的文件列表*/ break;case 2: scanf("%s",tmp); /*查看文件*/open_file(tmp);break;case 3: display_sys();/*查看系统信息*/break;case 4:scanf("%s",tmp);/*创建目录*/create_dir(tmp);break;case 5: scanf("%s",tmp); /*创建文件*/scanf("%d",&len);create_file(tmp,len);break;case 6: scanf("%s",tmp); /*删除文件*/for(i=0;i<64;i++) /*判断文件是不是正规文件*/{j=c[i].i_num;if(strcmp(tmp,c[i].file_name)==0 && (i_node[j].file_style)==1){del_file(tmp);break;}}if(i==64){printf("这个不是正规文件文件 \n");}break;case 7:scanf("%s",tmp); /*删除目录*/del_dir(tmp);break;case 8: scanf("%s",tmp1); /*进入当前目录下的指定目录相当于进入目录cd +目录名*/display_dir(tmp1);break;case 9: back_dir();/*返回上一级目录*/break;case 10:help();break;case 11:write_file(fp);/*将磁盘利用信息写进系统文件,退出*/ return;default:printf("SORRY,没有这个命令 \n");break;}}}五程序的调试与运行结果说明经过调试,程序运行一切正常。

相关文档
最新文档