操作系统课程设计++模拟磁盘文件管理的程序new
操作系统课程设计-文件管理
目 录一、基本想 .............................................. - 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编写目的通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统,设计、构造和开发现代操作系统的基本能力。
操作系统课程设计---文件管理
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;
操作系统课程设计-文件系统的模拟设计
操作系统课程设计报告题目:文件系统的模拟设计一、设计目的本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、设计内容(1)概述为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:1.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录2.列目录时要列出文件名,物理地址,保护码和文件长度3.源文件可以进行读写保护(2)设计原理和系统总体功能框架图1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。
2、文件物理结构可采用显式链接或其他方法。
3、磁盘空闲空间的管理可选择位示图或其他方法。
如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。
4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
5、对文件或目录的操作采用windows系统的API函数来实现。
6、设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:用户登录、创建目录、删除目录、创建文件、删除文件、读文件、写文件、复制文件、移动文件、返回根目录、退出。
功能结构图如图1.0所示:(3)详细设计及少数重要编码的说明这次课程设计中,我负责4个板块,分别是显示列表函数和目录、创建函数文件创建函数、打开文件函数和关闭文件系统函数。
①、显示列表函数和目录流程图如图1.1所示②、文件创建函数算法:查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以‘###’结束。
申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。
操作系统课程设计-模拟一个简单二级文件管理系统
模拟一个简单二级文件管理系统设计目的:通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
设计内容:模拟一个简单二级文件管理系统一、实验内容描述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.1设计目的:通过模拟操作系统的实现,加深对操作系统工作原理的理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力2.1设计原理:2.1.1文件管理和用户接口:文件管理和用户接口部分实现的主要是单用户的磁盘管理部分,包括文件的逻辑结构,物理结构,目录,磁盘分配回收,文件的保护和用户的接口实现。
系统中有2种文件,一种是存放任意字符的文件,一种是用来存放可以执行的文件,可以执行的文件内容就是模拟系统内进程的程序体。
文件要有一种特定的命令的可以执行的文件(可以建立一个 .exe文件里面写指令)他的内容很简单,就是:x=?;给X赋一个值(一位数),x++;X--;!??(第一个?为ABC中某个设备,第二个?为一位数,表示设备的时间(由于没有实际设备,所以无法知道设备何时工作完成,所以假如一个数,随着数的系统时间减少到0结束));end(表示文件结束,同时写入文件out,包括文件名字和路径和X的值)。
用户接口:用户接口提供用户命令接口,创建文件,删除文件,复制文件,粘贴文件,显示文件,编辑文件,建立目录,删除空目录,删除目录等等。
2.1.2磁盘模拟:用一个文件disk模拟磁盘,磁盘的每一个块64个字节,模拟磁盘工128个块,第0,1块存放文件分配表,第2个存放根目录,期于存放子目录和文件。
磁盘分配磁盘分配采用链式结构,系统采用文件分配表的方式记录磁盘空间的使用情况和链式结构的指针。
2.1.3目录内容:目录内容才用树型目录结构(1)目录项内容:8个字节:目录名,文件名(3个字节),扩展名(1个字节),末路。
文件属性(1个字节),起始磁盘号(1个字节),文件长度(2个字节),(2)根目录:根目录位置固定,为磁盘第2块,大小固定,工8项,站用第2块。
(3)子目录:位置不变,大小不固定。
2.1.4.存储管理:存储管理部分主要实现贮存和空间的分配和回收,存储的保护。
操作系统课程设计项目参考
滴加碘液后
滴加碘液前
12/12/2021
第十二页,共二十三页。
消化(xiāohuà):在消化道内将食物分解成可吸收 (xīshōu)的成分的过程
(包括物理性消化和化学性消化)
吸收(xīshōu):营养物质通过消化道壁进入循环 系统的过程
12/12/2021
第十三页,共二十三页。
消化(xiāohuà)和吸收的过程
12/12/2021
第十九页,共二十三页。
练习(liànxí)
• 2、分析数据,指出(zhǐ chū)哪一部分消化道中消化液最多。
• 在每天摄入800克食物和1200毫升水的情况下, 消化腺大致分泌以下数量消化液。 1500毫升唾液 2000毫升胃液 1500毫升肠液 500毫升胆汁 1500毫升胰液
12/12/2021
第二十二页,共二十三页。
内容 总结 (nèiróng)
第二节。食物中的营养物质是在消化系统中被消化和吸收的。这粒西瓜籽在姗姗的消化道内, 经过了难忘的时光。它先遇到像轧钢机似的上、下尖硬的怪物,差点儿将它压得粉身碎骨。后来它
No 钻进了一条(yī tiáo)又长又窄的迷宫,它在这里走了很久,身边的许多物质都神秘地消失了。走出迷
唾液腺、胃腺(wèixiàn)、肝脏、胰腺、肠腺
1、淀粉在__口__腔__开始消化、蛋白质在____开始胃消化、脂肪在_______开始 消小化肠。
2、胆汁是一种消化液,但不含消化酶,起乳化脂肪的作用。
二、人体消化、吸收的主要器官—— _____小肠 能 训 练解
胰脏:分泌(fēnmì)胰液 肠腺:分泌肠液
肝脏:最大的腺体,分泌胆汁。 胆汁无消化酶,有乳化脂肪 的
作用。
第七页,共二十三页。
操作系统实验里模拟实现磁盘文件管理
操作系统实验里模拟实现磁盘文件管理操作系统实验(七)磁盘文件1.实验内容使用C++模拟实现磁盘文件存储结构。
2.实验目的了解磁盘文件的存储物理结构。
3.实验题目实现磁盘文件写(必做)和插入(选做)操作。
4.程序流程图5.程序代码和结果#include <iostream>#include <string>using namespace std;typedef struct MULU{string name;int start;int length;}MULU;typedef struct FAT{int num;int next;}FAT;MULU mulu[10];int mulu_i=0;FAT fat[10];int allnum=10;int fat_i=0;void init(){for(int i=0;i<20;i++){fat[i].num=i;fat[i].next=0;}fat[0].next=-2;fat[1].next=-1;allnum-=2;}int getEmpty(){for(int i=0;i<20;i++){if(fat[i].next==0){ allnum--;return i;}}return -1;}int write(){cout<<"\n请输入文件名和记录数:"; string name; int n;int temp=0;int next=0;int s=0;cin>>name;cin>>n;if(n>allnum){cout<<"你输入的记录数过大!"<<endl;return -1;}for(int i=0;i<n*2;i++){next=getEmpty();if(next==-1){cout<<"没有空块!"<<endl;return -1;}if(i==0){s=next;}else{fat[temp].next=next;}temp=next;}fat[temp].next=-1;mulu[mulu_i].name=name;mulu[mulu_i].start=s;mulu[mulu_i].length=n;mulu_i++;cout<<"\n\t文件目录表"<<endl;for(i=0;i<mulu_i;i++)cout<<"\t"<<mulu[i].name<<"\t"<<mulu[i].start<<"\t"<< mulu[i].length<<"\t"<<endl; cout<<endl;cout<<"\tFAT表(-2表示FDF,-1表示FFF)"<<endl;for(int j=0;j<10;j++)cout<<"\t"<<fat[j].num<<"\t"<<fat[j].next<<"\t"<<endl;return 1;}int main(){init();int flag=1;while(flag<5){write();flag++;}return 0;}第二篇:实验一:磁盘与文件管理 3000字实验一:磁盘与文件管理【实训目的】1.掌握利用 NTFS 文件系统实现磁盘限额2.掌握利用 NTFS 文件系统压缩数据3.掌握利用 NTFS 文件系统中的 EFS 加密数据4.掌握共享文件夹的创建和访问5.掌握卷影副本的作用和使用方法【实验内容】1.使用 NTFS 文件系统实现磁盘限额2.使用 NTFS 文件系统压缩数据3.使用 NTFS 文件系统中的 EFS 加密数据4.练习创建、删除共享文件夹、访问共享文件夹、指定共享文件夹权限的方法5.练习使用卷影副本恢复受到损坏的共享文件夹6.验证用户的有效权限【实验环境】安装有 Windows Server 2003 操作系统的计算机【实训步骤】任务 1:NTFS 文件系统一、使用 NTFS 文件系统实现磁盘限额1.分配默认磁盘配额(1)为驱动器 c盘(必须是NTFS 分区)配置默认的限额管理设置值:磁盘空间限度:2MB;磁盘空间警告信息:1MB(2)建新用户 test,然后以 test 用户登录系统,向 data文件夹中分两次拷贝数据,1MB<第一次<2MB,第二次>2MB,哪一次拷贝成功?哪一次没成功?注:在“配额”选项卡中,若选中了“用户超出了配额限制时记录事件”和“用户超出了警告等级时记录事件” ,则可以在“事件查看器” (在“计算机管理”对话框中)中查看日志。
操作系统课程设计任务书-1(磁盘调度)
班 级
指 导 教 师成新田
金陵科技学院算机系统的一个重要系统软件。操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。本课程设计通过模拟实现操作系统中的某个功能子模块或部分算法,希望学生了解实际操作系统的工作过程,在实践中加深理解有关进程控制块、进程队列、死锁、调度等概念,体会和了解系统中重要算法的具体实施办法,提高学生实际应用和编程的技能。
2.课程设计题目及要求
磁盘是经常使用的一种重要的外设,对磁盘数据的寻道时间的长短直接影响机器的整体运行速度,本设计要求用C语言(或高级语言)编写程序模拟实现磁盘调度的常用算法。以加深对磁盘调度常用算法的理解和实现技巧。
1)、设计一个函数完成先来先服务的磁盘调度功能。
2)、设计一个函数完成最短寻道时间优先的磁盘调度功能。
中
能完成任务书所规定的各项任务,对所研究的问题表现出一定的分析、计算、论证能力;说明书、图纸质量一般;完成的软、硬件尚能达到规定的性能指标;语言较准确,文档基本齐全,书写比较规范。
良好
能完成任务书所规定的各项任务,对所研究的问题分析、计算、论证能力较强,某些见解有一定新意;说明书、图纸符合规范,质量较高;完成的软、硬件基本达到规定的性能指标;语言准确、流畅,文档齐全,书写规范。
6、孟庆昌.操作系统教程.西安:西安电科大出版社,2008
5.课程设计时间安排
起 止 日 期
工 作 内 容
2018年12月12日-12月18日
2018年12月19日-1月2日
2018年1月2日-1月2日
复习相关理论知识,或查阅资料、理解训练要求
根据设计要求,确定方案,程序设计
上机调试,验证程序设计正确性
设计总结报告
操作系统文件管理系统 课程设计
操作系统文件管理系统课程设计
操作系统文件管理系统课程设计一般包括以下内容:
1. 基本概念和原理:介绍文件管理系统的基本概念和原理,包括文件、目录、文件系统、文件操作等。
2. 设计需求分析:明确设计需求,包括基本功能、用户需求、性能要求等。
3. 文件存储结构的设计:设计文件存储结构,包括文件分配方式、文件存储结构、文件目录结构、文件保护等。
4. 文件操作的实现:实现文件的创建、打开、读写、删除等基本操作,以及文件的复制、移动、重命名等高级操作。
5. 目录管理的实现:实现目录的创建、删除、重命名等操作,以及目录的遍历和搜索等功能。
6. 文件系统的实现:实现文件系统的格式化、挂载、卸载等操作,以及文件系统的安全性和可靠性保障。
7. 用户界面的设计:设计用户界面,包括命令行界面和图形界面,以方便用户进行文件管理操作。
8. 系统测试和调试:对系统进行测试和调试,包括单元测试、集成测试、性能测试等,以确保系统的稳定性和可靠性。
9. 报告撰写和展示:根据课程设计的要求,编写设计报告和展示文稿,介绍系统的设计思路、实现方法和成果。
以上是一个基本的操作系统文件管理系统课程设计的内容,具体可以根据教师的要求和课程的安排进行适当调整和扩展。
操作系统课程设计模拟文件系统
操作系统课程设计模拟文件系统学院: 计算机科学技术专业: 计算机科学与技术(工)班级: 计10- 1班**: ***学号: ****************: ***2013年07月16日《操作系统原理》课程设计任务书(计算机科学与技术专业10-1)一、课程设计题目(任选一个题目)1.模拟进程管理2.模拟处理机调度3.模拟存储器管理4.模拟文件系统5.模拟磁盘调度二、设计目的和要求1.设计目的《操作系统原理》课程设计是网络工程专业实践性环节之一, 是学习完《操作系统原理》课程后进行的一次较全面的综合练习。
其目的在于加深对操作系统的理论、方法和基础知识的理解, 掌握操作系统结构、实现机理和各种典型算法, 系统地了解操作系统的设计和实现思路, 培养学生的系统设计能力, 并了解操作系统的发展动向和趋势。
2.基本要求:(1)选择课程设计题目中的一个课题, 独立完成。
(2)良好的沟通和合作能力(3)充分运用前序课所学的软件工程、程序设计、数据结构等相关知识(4)充分运用调试和排错技术(5)简单测试驱动模块和桩模块的编写(6)查阅相关资料, 自学具体课题中涉及到的新知识。
(7)课题完成后必须按要求提交课程设计报告, 格式规范, 内容详实。
三、设计内容及步骤1.根据设计题目的要求, 充分地分析和理解问题, 明确问题要求做什么。
2.根据实现的功能, 划分出合理的模块, 明确模块间的关系。
3.编程实现所设计的模块。
4.程序调试与测试。
采用自底向上, 分模块进行, 即先调试低层函数。
能够熟练掌握调试工具的各种功能, 设计测试数据确定疑点, 通过修改程序来证实它或绕过它。
调试正确后, 认真整理源程序及其注释, 形成格式和风格良好的源程序清单和结果;5.结果分析。
程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
目录1.课程设计的目的 (1)2.课程设计的要求 (1)3.需求分析 (1)3.1问题描述 (1)3.2数据结构 (2)3.2.1 类 (2)3.2.2 结构 (2)3.2.3 函数 (2)3.3系统运行环境 (3)4.概要设计 (3)4.1创建文件操作 (3)4.2删除文件操作 (4)4.3查看文件块号 (4)5 详细设计 (4)5.1创建文件 (4)5.2删除文件 (7)5.3查看文件块号 (10)6.总结 (12)参考文献 (13)附录 (15)1.课程设计的目的掌握模拟文件系统的设计方法, 具备初步的独立分析和设计能力。
操作系统 文件管理 课程设计
目录一、课程设计题目和目的 (1)二、课程设计要求 (1)三、程序设计思想 (1)四、文件系统的实现 (2)1.数据结构设计 (2)2.程序功能图 (3)3.实体关系图 (3)4.数据流图 (4)5.程序流程图 (5)(1) .建立文件:create(文件名,记录长度) (6)(2) .写文件:write(文件名,开始位置,字符串) (7)(3) .读文件:read(文件名,开始位置,长度) (8)(4) .显示文件所有内容 type(文件名) (8)(5) .删除文件delete(文件名) (9)(6) .重命名文件ren(文件名,新文件名) (10)(7) .查询文件属性ask(文件名) (11)(8) .关闭文件close(文件名) (12)五、程序运行结果及分析 (13)六、课程设计总结 (15)七、参考文献 (16)八、附录 (17)一、课程设计题目和目的通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
二、课程设计要求通过课程设计,要求学生主要掌握如下内容:1.文件的物理结构可以选用顺序分配、链表分配或索引分配。
2.建立文件:从命令中得到文件名,得到该文件的文件长度,建立文件。
修改目录表。
3.删除文件:回收文件占用的空间,修改目录表4.读文件:read [文件名] [显示开始字节] [显示的字节数] ,直接显示所需要的字节数。
5.写文件:write [文件名] [插入的位置] [插入的内容]6.查询属性:显示文件属性文件名,类型,长度,时间等。
三、程序设计思想阅读操作系统方面的书籍,了解操作系统的文件系统原理。
结合分析课程设计要求,确定实体以及它们之间的关系。
实体关系有三张表(磁盘空间分配表、文件表、打开文件表)、一个模拟磁盘的数组、命令服务和用户构成。
操作系统 文件系统课程设计
操作系统文件系统课程设计
操作系统文件系统课程设计主要涉及以下几个方面:
1. 实现基于模块的文件系统:
- 修改ext3或ext4的源代码
- 动态加载和卸载新的文件系统
- 修改文件系统的名称,优化文件写操作
2. 新增Linux驱动程序:
- 增加一个驱动程序(使用内存模拟设备)
- 动态加载和卸载新的驱动
- 通过程序或命令行使用该驱动
- 保存和读取数据
3. 统计Linux系统缺页的次数:
- 在内核中实现缺页次数统计
- 编译并安装新内核
- 建立内核模块,通过/proc实现用户态查看缺页次数
4. 模拟磁盘文件系统实现:
- 设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区
- 支持多级目录结构,支持文件的绝对读路径
- 实现建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性等命令建议根据以上概述,结合实际需求和兴趣,选择相应的题目进行课程设计。
模拟磁盘调度算法操作系统课程设计
模拟磁盘调度算法,操作系统课程设计某某大学课程设计报告课程名称:操作系统设计题目:模拟磁盘调度算法 _________________ 系别:______________ 计算机系______________________ 专业:___________ 计算机科学与技术 _________________ 组别:_____________________________________________ 学生姓名:________________ 学号: ___________________ 起止日期:__________________________________________ 指导教师:__________________________________________目录第一章需求分析 (1)1.1 课程设计的简介 (1)1.2 课程设计的目的 (1)1.3 磁盘调度主要思想 (1)1.4 课程设计内容 (2)第二章概要设计 (3)2.1 设计思想 (3)2.2 数据结构 (3)2.3 模块调用关系图 (3)2.4 子模块程序流程图 (5)第三章详细设计 (6)3.1 模块划分 (6)第四章代码测试 (9)4.1 先来先服务 (9)4.1 最短寻道时间优先 (11)4.1 扫描算法 (12)第五章心得体会 (13)第六章致谢 (13)参考文献 (13)附源代码 (1)第一章需求分析1.1 课程设计的简介这是一个用VC++6.0为工具、C++为编程语言而实现模拟先来先服务算法(FCFS、最短寻道时间优先算法(SSTF、扫描算法(SCAN的一个磁盘调度程序。
该程序设计系统主界面可以灵活选择某种算法并算出磁头移动的总磁道数以及平均磁道数。
1.2 课程设计的目的本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法(FCFS、最短寻道时间优先算法(SSTF、扫描算法(SCAN等磁盘调度算法的理解。
磁盘模拟管理课程设计
磁盘模拟管理课程设计一、课程目标知识目标:1. 学生能理解磁盘存储的基本概念,掌握磁盘空间分配和回收的原理。
2. 学生能够描述不同文件系统(如FAT32、NTFS等)的特点及适用场景。
3. 学生能够解释磁盘碎片产生的原因及整理磁盘碎片的方法。
技能目标:1. 学生能够运用模拟软件进行磁盘分区、格式化、分配空间等操作。
2. 学生能够通过模拟实践,掌握磁盘空间优化和管理技巧。
3. 学生能够分析磁盘使用情况,提出合理的磁盘管理策略。
情感态度价值观目标:1. 学生通过学习磁盘管理,培养良好的计算机使用习惯,提高信息素养。
2. 学生在团队协作中,学会分享和交流,培养合作精神和沟通能力。
3. 学生能够认识到磁盘管理在计算机使用中的重要性,增强信息安全意识。
课程性质:本课程为信息技术课程,以实践操作为主,结合理论知识,培养学生的实际操作能力和信息素养。
学生特点:学生为初中生,具备一定的计算机操作基础,对新鲜事物充满好奇心,但注意力容易分散。
教学要求:教师应结合学生特点,设计生动有趣的实践任务,引导学生积极参与,注重培养学生的学习兴趣和动手能力。
在教学过程中,关注学生的个体差异,给予每个学生充分的指导和鼓励。
通过课程学习,使学生能够掌握磁盘管理的基本知识和技能,提高信息技术素养。
二、教学内容1. 磁盘存储基础知识:包括磁盘的结构、存储原理、磁盘分区等。
- 磁盘结构及工作原理- 磁盘分区的概念与作用2. 文件系统介绍:介绍FAT32、NTFS等常见文件系统的特点、优缺点及使用场景。
- FAT32与NTFS文件系统的区别- 文件系统的选择与应用3. 磁盘空间管理:学习磁盘空间分配、回收以及优化的方法。
- 磁盘空间分配与回收策略- 磁盘空间优化技巧4. 磁盘碎片整理:了解磁盘碎片产生的原因,学习整理磁盘碎片的方法。
- 磁盘碎片产生原因及影响- 磁盘碎片整理的操作步骤5. 磁盘管理工具与实践:运用磁盘管理模拟软件进行实际操作。
模拟文件管理课程设计
模拟文件管理课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握文件管理的基本概念、原则和方法;技能目标要求学生能够运用文件管理原则和方法进行实际操作,提高文件管理效率;情感态度价值观目标要求学生培养良好的文件管理习惯,增强对文件管理的重视。
通过分析课程性质、学生特点和教学要求,明确课程目标,将目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容根据课程目标,选择和教学内容,确保内容的科学性和系统性。
本课程的教学内容主要包括以下几个部分:1.文件管理基本概念:文件、文件夹、存储设备等;2.文件管理原则:分类、命名、存储、备份等;3.文件管理方法:手动管理、自动化管理、云存储等;4.文件管理实际操作:文件创建、复制、移动、删除、压缩等;5.文件管理工具的使用:操作系统自带工具、第三方软件等。
制定详细的教学大纲,明确教学内容的安排和进度,指出教材的章节和列举内容。
三、教学方法选择合适的教学方法,如讲授法、讨论法、案例分析法、实验法等。
通过教学方法应多样化,以激发学生的学习兴趣和主动性。
1.讲授法:讲解文件管理的基本概念、原则和方法;2.讨论法:引导学生探讨文件管理的重要性,分享实际经验;3.案例分析法:分析实际案例,让学生了解文件管理的具体应用;4.实验法:让学生动手实践,掌握文件管理的实际操作。
四、教学资源选择和准备适当的教学资源,包括教材、参考书、多媒体资料、实验设备等。
教学资源应该能够支持教学内容和教学方法的实施,丰富学生的学习体验。
1.教材:选用权威、实用的教材,为学生提供系统性的知识学习;2.参考书:提供相关领域的参考书籍,拓展学生的知识视野;3.多媒体资料:制作PPT、视频等多媒体资料,提高教学的趣味性和形象性;4.实验设备:准备计算机、存储设备等实验设备,方便学生进行实践操作。
五、教学评估设计合理的评估方式,全面反映学生的学习成果。
操作系统试验——模拟文件管理系统
模拟文件管理系统一、实验内容1.基本要求:编写一程序,模拟一个简单的文件管理系统。
树型结构,目录下可以是目录,也可以是文件。
在此文件管理系统,可实现的操作有:改变目录:格式:cd <目录名>显示目录:格式:dir[<目录名>]创建目录:格式:md <目录名>删除目录:格式:rd<目录名>新建文件:格式:edit<文件名>删除文件:格式:del<文件名>退出文件系统:exit2.目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开3.功能具体描述:改变目录:改变当前工作目录,目录不存在是给出出错信息显示目录:显示指定目录下或当前目录下所有文件和一级目录(选做:带/s 参数的dir命令,显示所有子目录)创建目录:在指定路径或当前路径下创建指定目录。
重名时给出出错信息。
删除目录:删除指定目录下所有文件和子目录。
要删目录不空时,要给出提示是否要删除。
创建文件:创建指定名字的文件,只要创建表示文件的节点即可,内容及大小不考虑。
删除文件:删除指定文件,不存在时给出出错信息。
退出文件系统:exit4.总体流程:初始化文件目录输出提示符,等待接受命令,分析键入的命令;对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令。
直到键入exit退出为止。
二、数据结构设计StructFileNode{Char filename[FILENAME_LEN];//文件名/目录名Int isdir ;//目录、文件的识别标志Int i_nlink;//文件链接数Int adr;//文件的地址Struct FileNode *parent,*child;//指向父亲的指针和左孩子的指针Struct FileNode *sibling_prev,*sibling_next;//指向前一个兄弟的指针和后一个兄弟的指针。
}三、算法设计3.1 功能模块图3.2算法思路3.2.1实现方法bool spile(char *str,char *cmdstr,char *filestr);//切割字符串bool shell(char *str);//用来解释命令bool errorp(int id);ﻩﻩ//打印错误提示bool boot(); ﻩ//启动初始化filenode* find(char*str,filenode *_root); //递归对目录树进行查找bool cdexc(char *str);ﻩﻩ//执行cd命令booldirexc(char *str); //执行dir命令bool mdexc(char *str); ﻩ//执行md命令bool editexc(char *str);//执行edit命令bool delexc(char *str,filenode *fcur,bool mode,bool dir);//执行del命令bool exitexc(); ﻩﻩﻩ//退出filenode* createnode(char *str,bool_isdir,int _adr,filenode*_par);//新建对象节点函数调用图3.2.2 设计思想建立一刻目录树,根据输入的命令字符串,对该目录树进行增删等操作。
操作系统课程设计-文件管理实验报告
操作系统课程实验报告2013~2014年度第1学期院系:学号:姓名:任课教师:成绩评定:实验一题目:文件管理完成日期:年月日1、实验目的了解文件管理的功能和任务,理解文件系统组成和特点,熟悉文件系统的访问和操作。
实验要求用高级语言编写和调试一个简单的模拟文件管理程序。
加深理解有关盘块的分配与回收、目录管理等的具体实施策略。
2.、实验内容模拟一个资源管理器进行文件操作,包括建立和删除目录、建立和删除文件等基本文件操作。
建立相应的数据结构(如:位示图等),模拟盘块管理。
可以参照图6界面进行设计。
3、算法设计1)、定义主面板MainFrame,布局好各个控件,并初始化/** 往node节点下添加一个子节点obj;*/public void addChild(Object obj, DefaultMutableTreeNode node) {if (obj != null && node != null) {DefaultMutableTreeNode temp = new DefaultMutableTreeNode(obj);if (node.getAllowsChildren())node.add(temp);if(!((String) obj).equals("A:\\") && ((String) obj).length() <= 3)// 防止读取A软驱,会出现异常;用于初始用的;addChildren(cmd.listAll((String) obj), temp);}}/** 在node节点下添加数组children;*/public void addChildren(String[] children, DefaultMutableTreeNode node) { if (children != null && node != null) {for (int i = 0; i < children.length; i++) {addChild(children[i], node);}}}/** 对树的节点进行预提取;*/public void addPrefetchChildren(String path, DefaultMutableTreeNode node) { addChildren(cmd.listDirectory(path), node);}/** 对路径路径进行连接;(已经获得了所有的整个路径,需要量转化)*/public String toFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public String toPFilePath(String str) {// 先去掉头尾的[];String pa = str.substring(1, str.length() - 1);String[] temp = pa.split(", ");String path = "";for (int i = 1; i < temp.length - 1; i++) {if (!path.endsWith("\\") && !path.equals(""))// 不为空是为去根节点;path += "\\";path += temp[i];}return path;}public class ExpandListener implements TreeWillExpandListener {/** 树展开及收缩监听;*/private MainFrame mainFrame = null;public ExpandListener(MainFrame mainFrame) {this.mainFrame = mainFrame;}public void treeWillExpand(TreeExpansionEvent event) {// 对节点的路径进行转化String path = toFilePath(event.getPath().toString());TreePath treePath = event.getPath();DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath.getLastPathComponent();// System.out.println("所展开节点的路径:" + path);// System.out.println(treePath);if (node.getDepth() < 2) {Enumeration children = node.children();String filePath = "";while (children.hasMoreElements()) {DefaultMutableTreeNode temp = (DefaultMutableTreeNode) children.nextElement();filePath = "";filePath = path;if (!filePath.endsWith("\\"))filePath += "\\";filePath += temp.toString();// System.out.println("temp=" +filePath);mainFrame.addPrefetchChildren(filePath, temp);}}}2)、添加功能“添加文件(夹)addframe()”、“修改文件(夹)mvframe()”public void addframe() {JFrame addFrame = new JFrame();JLabel jlbl = new JLabel("请输入要添加的文件(夹)名:");addrs = new JLabel("");addrs.setBounds(180, 10, 100, 25);jlbl.setBounds(10, 10, 170, 25);addfile = new JTextField();addfile.setBounds(10, 40, 260, 25);btnaddf = new JButton("添加文件");btnaddd = new JButton("添加文件夹");btnaddf.setBounds(20, 80, 100, 25);btnaddd.setBounds(160, 80, 100, 25);btnaddf.addActionListener(this);btnaddd.addActionListener(this);addFrame.add(jlbl);addFrame.add(addrs);addFrame.add(addfile);addFrame.add(btnaddf);addFrame.add(btnaddd);addFrame.setBounds(400, 350, 300, 150);addFrame.setTitle("添加文件(夹)");addFrame.setLayout(null);addFrame.setVisible(true);}public void mvframe() {JFrame mvFrame = new JFrame();JLabel jlbl = new JLabel("请输入修改后的文件名:");mvrs = new JLabel("");mvrs.setBounds(160, 10, 140, 25);jlbl.setBounds(10, 10, 170, 25);mvfile = new JTextField();mvfile.setBounds(10, 40, 260, 25);btnmvf = new JButton("修改文件名");btnmvd = new JButton(" 修改文件夹名");btnmvf.setBounds(10, 80, 120, 25);btnmvd.setBounds(150, 80, 120, 25);btnmvf.addActionListener(this);btnmvd.addActionListener(this);mvFrame.add(jlbl);mvFrame.add(mvrs);mvFrame.add(mvfile);mvFrame.add(btnmvf);mvFrame.add(btnmvd);mvFrame.setBounds(400, 350, 300, 150);mvFrame.setTitle("修改文件(夹)名");mvFrame.setLayout(null);mvFrame.setVisible(true);}}3)显示文件* 显示系统中的所有盘符;public String[] ListDisks() {File roots[] = File.listRoots();// 根盘符;String disks[] = new String[roots.length];for (int i = 0; i < roots.length; i++) {disks[i] = roots[i].toString();}return disks;}* 获得路径path下的文件;public String[] listAll(String path) {try {File f = new File(path);String[] fileName;String tmp = null;mainFrame.fileshow.setText(null);mainFrame.filestyle.setText(null);if (f.isDirectory()) {fileName = f.list();// System.out.println("共有" + fileName.length + "个文件");for (int i = 0; i < fileName.length; i++) {mainFrame.fileshow.append(fileName[i] + '\n');tmp = path + '\\' + fileName[i];// System.out.println(tmp);if (listDirectory(tmp) != null) {mainFrame.filestyle.append("文件夹\n");} else {mainFrame.filestyle.append("文件\n");}}return fileName;} else if (f.isFile()) {System.out.println("这是一个文件");return null;} else {// System.out.println(path);return null;}} catch (Exception e) {return null;}}public String[] listDirectory(String path) {File f = new File(path);String[] fileName;if (f.isDirectory()) {fileName = f.list();return fileName;} else {// System.out.println(path + "是文件");return null;}}* 进行md操作;md <目录名> 功能: 创建新目录public void md(String directory) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + directory;File newFile = new File(temp);if (!newFile.exists()) {try {if (newFile.isDirectory() == false) {newFile.mkdirs();System.out.println("文件夹创建成功!");} else {System.out.println("文件夹创建出错!");}} catch (Exception e) {System.out.println("出错信息:" + e.getMessage());}} else {System.out.println("文件夹已经存在");}}}* 进行rd操作;rd <目录名> 功能: 删除目录;public void del() {String temp = mainFrame.currentPath;File file = new File(temp);if (file.exists()) {if (file.delete()) {mainFrame.fileshow.setText("文件(夹)删除成功!");} else {mainFrame.fileshow.setText("文件(夹)删除操作出错!");}} else {mainFrame.fileshow.setText("文件(夹)不存在");}}/** 进行edit操作:edit <文件名> 功能: 新建文件*/public void edit(String file) {if (!mainFrame.currentPath.equals("")) {String temp = mainFrame.currentPath + "\\" + file;File newFile = new File(temp);if (newFile.exists()) {mainFrame.addrs.setText("文件已经存在!");System.out.println("文件已经存在!");} else {try {newFile.createNewFile();mainFrame.addrs.setText("文件创建成功!");System.out.println("文件创建成功!");} catch (Exception e) {System.out.println("文件创建失败:" + e.getMessage());}}}}public void mvf(String file){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + file;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件名成功!");}else{mainFrame.mvrs.setText("存在同名文件!");}}}}public void mvd(String dir){if (!mainFrame.PPath.equals("")) {String temp = mainFrame.PPath + "\\" + dir;File newFile = new File(mainFrame.currentPath);if (newFile.exists()) {if(newFile.renameTo(new File(temp))==true){mainFrame.mvrs.setText("修改文件夹名成功!");}else{mainFrame.mvrs.setText("存在同名文件夹!");}}}}}4、运行与测试运行时,弹出主界面双击文件盘C在E盘路径添加文件夹操作系统,再添加文件操作系统如果文件已存在会显示可以更改文件名称删除文件,不过有个BUG,要文件一层层删,才可以删除。
操作系统文件管理系统模拟实验
操作系统文件管理系统模拟实验操作系统文件管理系统模拟实验一、实验目的本实验旨在通过模拟操作系统的文件管理系统,加深对操作系统文件管理的理解,锻炼操作系统的应用能力。
二、实验环境1、操作系统:Windows/Linux/MacOS2、编程语言:C/C++/Java/Python等三、实验内容1、初始化文件管理系统1.1 创建根目录,并初始化空文件目录1.2 初始化用户目录和权限设置2、文件操作2.1 创建文件2.1.1 检查文件名合法性2.1.2 检查文件是否已存在2.1.3 为新文件分配磁盘空间2.1.4 添加文件元数据信息2.2 打开文件2.2.1 检查文件是否存在2.2.2 检查用户权限2.3 读取文件内容2.3.1 读取文件权限检查2.3.2 读取文件内容2.4 写入文件内容2.4.1 写入文件权限检查2.4.2 写入文件内容2.5 删除文件2.5.1 检查文件是否存在2.5.2 检查用户权限2.5.3 释放文件占用的磁盘空间2.5.4 删除文件元数据信息3、目录操作3.1 创建子目录3.1.1 检查目录名合法性3.1.2 检查目录是否已存在3.1.3 添加目录元数据信息3.2 打开目录3.2.1 检查目录是否存在3.2.2 检查用户权限3.3 列出目录内容3.3.1 列出目录权限检查3.3.2 列出目录内容3.4 删除目录3.4.1 检查目录是否存在3.4.2 检查用户权限3.4.3 递归删除目录下所有文件和子目录3.4.4 删除目录元数据信息四、实验步骤1、根据实验环境的要求配置操作系统和编程语言环境。
2、初始化文件管理系统,创建根目录,并初始化用户目录和权限设置。
3、进行文件操作和目录操作。
五、实验结果分析根据实验步骤进行文件操作和目录操作,观察系统的运行情况并记录相关实验结果。
六、实验结论通过本实验,深入了解了操作系统中文件管理系统的相关原理和实现方式,并且通过实验操作进一步巩固了相应的应用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模拟磁盘文件管理的程序一、课程设计内容⑴自定义磁盘文件管理的数据结构;⑵能够自由创建、修改、删除文件;⑶文件具有一定自定义的属性;⑷能够显示当前系统文件的状态。
二、课程设计的数据结构说明程序中定义了两个类:class file//文件类{private:char name[10]; //文件名public:int tag; //删除标记 1:已删 0:未删file( ){ }char *getname( ){return name;} //获取文件名int gettag( ){return tag;} //获取删除标记int getlength() {return length;} //获取文件大小int getblocknum() {return blocknum;} // 磁盘块数int getblocksum1(){return blocksum1;} //磁盘块号的始点int getblocksum2(){return blocksum2;} //磁盘块号的终点int length,blocknum,blocksum1,blocksum2;void setname(char na[ ] ) {strcpy(name,na);} //设置文件名void delwenjian(){ tag=1; }//设置删除标记 1:已删 0:未删void creatfile(char *na,int L,int num,int s1,int s2) //创建文件void deltefile(char *na) {tag=1; strcpy(name,na);} //删除文件void disp( )//输出文件信息class fdatabase //文件库类{ private:int top; //文件记录指针file f[50];public:fdatabase(){top=-1;} //构造函数int search(char *fname)//按文件名查找int creatfile(char *na,int L,int num,int s1,int s2)//创建文件时先查找是否存在int deltefile(char *na)//删除文件时先查找是否存在void disp() //输出所有文件信息};三、课程设计的模板说明1、初始化,建立文件系统输入磁盘大小(G),每个盘块大小(M),自动建立位示图,位示图字长定为32位输出位示图的行数,以及行号、列号与磁盘块号的转换公式(都从0开始编号)。
2、循环选择执行以下功能1、存储文件输入建立的文件名和文件大小,如果该文件名已经存在,则输出不能建立的信息否则计算所需的磁盘块数为其分配足够多的磁盘块,并记录下来输出所占用的磁盘块号2、删除文件输入要删除的文件名,如果该文件名不存在,则输出删除错误信息,否则收回该文件所占用的磁盘块删除该文件名3、显示位示图情况显示位示图的情况显示剩余磁盘块的数目4、显示文件列表显示文件名,文件大小,占用的磁盘块数目和磁盘块号四、课程设计的源代码#include<iostream.h>#include <math.h>#include<iomanip.h>#include<string.h>#include<fstream.h>int i=0,j=0,sum=0,tt=0,r,ii,k,g,m;int a[100][32];class file//文件类{private:int no; //文件编号char name[10]; //文件名public:int tag; //删除标记 1:已删 0:未删file( ){ }char *getname( ){return name;} //获取姓名int gettag( ){return tag;} //获取删除标记int getno() {return no;} //获取文件编号int getlength() {return length;} //获取文件大小int getblocknum() {return blocknum;} // 磁盘块数int getblocksum1()//磁盘块号的始点{ return blocksum1; }int getblocksum2()//磁盘块号的终点{ return blocksum2;}int length; //文件大小int blocknum;//盘块数int blocksum1;//所占盘块号的始点int blocksum2;//所占盘块号的终点void setname(char na[ ] ) //设置文件名{strcpy(name,na);}void delwenjian(){ tag=1; }//设置删除标记 1:已删 0:未删void creatfile(char *na,int L,int num,int s1,int s2) //创建文件{ tag=0;length=L;blocknum=num;blocksum1=s1;blocksum2=s2;strcpy(name,na);blocknum=length/m; //盘块数=文件大小/盘块大小if(length%m!=0) //盘块数取上整blocknum=blocknum+1;cout<<" 所需磁盘块数:"<<blocknum<<endl<<endl;if((sum+blocknum)<=32) //所有盘块数只占用一行,直接赋值{ for(;j<(sum+blocknum);j++)a[i][j]=1;sum=sum+blocknum; //再进行下面文件的盘块数累加}else{ //占用多行,先赋值整行for(;j<32;j++)a[i][j]=1;i=i+1;for(j=0;j<(sum+blocknum)-32;j++) //再进行剩余项赋值{a[i][j]=1;}sum=sum+blocknum-32;}tt=tt+blocknum; //输出文件所占用的盘块号cout<<" 所占磁盘块号:"<<tt-blocknum<<" to "<<tt-1<<endl; blocksum1=tt-blocknum;blocksum2=tt-1;}void deltefile(char *na) //删除文件{ tag=1;strcpy(name,na);}void disp( )//输出文件信息{cout<<setw(8)<<name<<setw(10)<<length<<setw(18)<<blocknum<<setw(12)<<blocksum1<<" to "<<blocksum2<<endl;}};class fdatabase //文件库类{ private:int top; //文件记录指针file f[50];public:fdatabase() //构造函数{top=-1;}int search(char *fname)//按文件名查找{for ( ii=0;ii<=top;ii++){ if (strcmp(f[ii].getname(),fname)==0 && f[ii].tag==0) return 0;}return 1;}int creatfile(char *na,int L,int num,int s1,int s2)//创建文件时先查找是否存在{ int p;p=search(na);if (p==1){ top++;f[top].creatfile(na,L,num,s1,s2);return 1;}else{cout<<" !!!该文件已存在,不能创建!!!\n\n";return 0; }}int deltefile(char *na)//删除文件时先查找是否存在{int b,p,x=0,n1,n2,q1,q2,t;p=search(na);if (p==0) //若文件存在{ //进行删除文件赋值f[ii].tag=1;b=f[ii].length/m; //盘块数=当前文件大小/盘块大小if(ii==0) // 对第一个删除文件进行赋值for(k=0;k<b;k++)a[x][k]=0;else{n1=(f[ii-1].blocksum2+1)/32; //被查找的文件之前文件所占用的盘块数/32,//大于0表示跨行n2=(f[ii].blocksum2+1)/32; //所有文件所占用的盘块数/32,大于0表示跨行q1=(f[ii-1].blocksum2+1)-n1*32; // 当前文件的开始盘块号q2=(f[ii].blocksum2+1)-n2*32; // 用于跨行后计算盘块号t=n2-n1;if(t==0) //若n2与n1相等,表明当前所有被占用盘块在同一行for(k=q1;k<1+b;k++)a[n2][k]=0;else{ if((f[ii-1].blocksum2+1)%32==0) //前面所占用的盘块数是32倍数{ x=x+n1; //当前文件赋值for(;t-1>=0;t--,x++) //循环进行整行赋值for(k=0;k<32;k++)a[x][k]=0;x=n2; //对剩余项赋值for(k=0;k<b-(t-1)*32;k++)a[x][k]=0;}else //对当前文件前几项赋值{ x=n1;for(k=q1;k<32;k++)a[x][k]=0;x=x+1;int t1=t;for(;t-1>0;t--,x++) //中间整行赋值for(k=0;k<32;k++)a[x][k]=0;x=n2; //最后剩余项赋值for(k=0;k<(f[ii].blocksum2+1)-t1*32;k++)a[x][k]=0;}}return 1; }}else{cout<<"该文件不存在";return 0;}}void disp() //输出所有文件信息{for (int i=0;i<=top;i++)if(f[i].tag==0)f[i].disp();}};void bit_map(int I){int s=0;cout<<"---------------------------------------------------------------"<<endl;for(int p=0;p<I;p++){for(int q=0;q<32;q++)cout<<a[p][q]<<" ";cout<<endl;}out<<"----------------------------------------------------------------"<<endl;for(int p1=0;p1<I;p1++)for(int q1=0;q1<32;q1++)if(a[p1][q1]==1)s=s+1;s=(g*1024)/m-s;cout<<" 剩余盘块数:"<<s<<endl;}void main(){ int I,l,b,i,j,ss1,ss2,sum=0;char fname[20];fdatabase p;file w;cout <<"\t\t************************************************\n"; cout <<"\t\t* *\n"; cout <<"\t\t* 初始化,建立文件系统 *\n";cout <<"\t\t* *\n";cout <<"\t\t************************************************\n";cout <<" 请输入磁盘大小GB: ";cin >>g;cout<<endl;cout <<" 请输入盘块大小MB: ";cin >>m;cout<<endl;I=(g*1024)/(32*m);for( i=0;i<I;i++)for( j=0;j<32;j++)a[i][j]=0;cout<<" 建立的位示图为:"<<endl;bit_map(I);cout<<" 行数:"<<I<<endl;cout <<"\t\t************************************************\n";cout <<"\t\t* *\n";cout <<"\t\t* 行号、列号与磁盘块号的转换公式为: *\n"; cout <<"\t\t* 磁盘块号=行号*32+列号 *\n";cout <<"\t\t* 行号=磁盘块号/32 *\n";cout <<"\t\t* 列号=磁盘块号%32 *\n";cout <<"\t\t* *\n";cout <<"\t\t************************************************\n";char choice;while(choice!='0'){cout <<"\t\t************************************************\n";cout <<"\t\t* *\n";cout <<"\t\t* 文件管理系统 *\n";cout <<"\t\t* *\n";cout <<"\t\t************************************************\n";cout <<"\t\t\t1 存储文件\n\n\t\t\t2 删除文件\n\n\t\t\t3 显示位示图情况 \n\n\t\t\t4 显示文件列表"<<endl;cout <<" 请输入选择项: ";cin >> choice;cout<<endl;switch (choice){case '1':cout <<" 请输入文件名: ";cin>>fname;cout<<endl; //创建文件前,先查找是否有同名文件存在int q;q=p.search(fname);if (q==0){ cout<<" !!!该文件已存在,不能创建!!!\n\n";break;}cout <<" 请输入文件大小MB: ";cin>>l;cout<<endl;if(l>g*1024){cout<<" !!!文件大小超过磁盘最大容量,无法进行分配!!!"<<endl;break;}p.creatfile(fname,l,b,ss1,ss2);break;case '2':cout <<" 请输入文件名: ";cin>>fname;cout<<endl;q=p.search(fname);if (!q==0){cout<<" !!!该文件不存在,无法删除!!!\n\n ";break;}p.deltefile(fname);break;case '3':cout <<"\t\t**************显示位示图如下*********************\n"; bit_map(I);cout<<endl;break;case '4':cout <<"\t\t*************文件列表如下************************\n"; cout<<"---------------------------------------------------------------"<<endl;cout<<setw(10)<<"文件名"<<setw(15)<<"文件大小(MB)"<<setw(15)<<"所占盘块数"<<setw(15)<<"所占盘块号"<<endl;p.disp();cout<<endl;break;default:cout<<"输入错误,请从新输入: \n\n";break;}}}五、课程设计程序运行结果1、初始化,建立文件系统(1)用户根据提示输入磁盘大小(GB)与每个盘块大小(MB);(2)程序首先根据用户输入的磁盘大小(GB)与每个盘块大小(MB),自动建立位示图,即初始化位示图,位示图每一行长度固定为32位(即列固定为32);位示图中每一位表示一个盘块,取值0和1分别表示空闲和占用。