文件系统的设计与实现(操作系统课程设计)

 转发请注明:http://blog.csdn.net/tianqingdezhuanlan/article/details/51344739

源码下载地址:http://download.csdn.net/download/u013255737/9513460

目录

一、设计目的、意义 1

二、 设计分析 1

三、方案分析 2

四、功能模块实现 3

五、最终结果分析 4

六、 设计体会 5

一、设计目的、意义

1.通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

2.意义:本文件系统采用多级目录,其中第一级对应于用户账号,第二级对应于用户账号下的文件,第三级对应文件夹下的文件,以此类推。另外,为了简单本文件系统未考虑文件共享、文件系统安全以及管道文件与设备文件等特殊内容。

二、设计分析

① 用户登录

用户分为超级管理员、管理员和普通用户。超级管理员具有创建用户并设置权限的权限;

管理员与超级管理员权限基本相同。

② 建立文件

模拟文件系统进行“建立文件”的处理。

③ 打开文件

约定操作类型与文件属性不符合和正处在“建立”状态的文件不允许打开。

④ 关闭文件

对某个文件不需要再读或写的时候,用户应关闭该文件。

⑤ 读文件

文件打开后可顺序读文件中的记录,读长度表示本次操作需读的记录个数。

⑥ 写文件

执行写文件操作时要区分两种情况,第一种是在执行create后要求写,第二种是执行open后要求写。对第二种情况可认为用户要对一个已建立好的文件进行修改。一个文件可以分多次写,既可按记录顺序写也可随机写一个记录,采用顺序写时可省略记录号。

⑦ 删除文件

把请求撤消的文件从拥护文件目录表中除名,收回该文件站用的存储区域。

⑧ 文件列表

将目前本用户本路径的文件列出,并列出相关的属性。

⑨ 结束

退出程序,返回原有操作系统。

三、方案分析

3.1:主要的数据结构

通过分析课程设计要求,具体设计出如下数据结构:

//用户类型定义

struct user

{

char name[10];//用户名

int pride;//用户权限,1为管理员,0为普通用户

char pass[10];//用户密码

};

//定义空白区项

struct freeb

{

int number;

struct freeb * next;

};

//定义文件打开项

struct fileb

{

int parent;//所在父节点

char name[15];//文件名

int pride;//读写权限,0只读,1读写

int  rex;//读写状态,0为没有,1读2写

struct fileb * next;

};

//定义文件索引项

struct findex

{

char name[15];

int number;

int parent;

char kind;

struct findex * next;

};

//定义目录表项

struct dreitem

{

char name[25];//目录或者文件名称

int share; //共享数

int parent;//上层目录

int pride;//文件操作权限,0只读,1读写

int empty;//是否是空闲块,0为空闲块,1为非空

char kind;//类型,文件为f,文件夹为d

};

3.2:流程图

3.2.1主流程图:

3.2.2创建文件夹流程图:

 3.2.3创建文件流程图:

3.2.4写文件流程图:

 

3.2.5进入文件函数流程图:

3.2.6读文件流程图:

 

 

3.2.7删除流程图:

 

四、功能模块实现

4.1 login登陆:

用户输入用户名和密码,在user文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。

4.2 createuser()新建用户:

先根据提示输入用户名,再判断此用户名是否已存在,若存在则重新输入,若没有,则用户创建成功。函数结束。

4.3intlist()初始化空闲区链表以及文件索引链:

本函数在程序用运行后,对空闲区进行初始化。

4.4 newdrec()新建目录:

输入参数为要建立的类型,f为文件,d为文件夹。并输入权限(0只读,1读写)。在创建目录时,并检测是否有重名的目录,若有则创建失败;没有重名的就在空闲区添加,否则,直接在文件中添加。

4.5 lsfile()列出当前路径下的文件:

查找当前目录下的各种文件并列举出来。

4.6 back()目录后退

检测当前是否处于根目录下,不是则返回到上一目录;若当前处于根目录下,则无法后退。

五、最终结果分析

1:磁盘格式化后进入登录界面

 

2:先用超级管理员登陆后显示帮助信息并创建用户

 

3用户登陆后并列出当前目录下的内容

4.打开文件

5.关闭文件

6,当前路径

六、设计体会

第一、操作系统这次课程设计让我学习到了很多计算机方面的知识,在一定程度上对以前的所学知识进一步加深,更让我有了一个系统的了解。操作系统是计算机的软件的系统的基础,具有一定平台性。掌握好这门课程对我们以后学习计算机知识有一个很大的帮助。

第二、本次课程设计让我明白了编写程序一定要动手去写代码,进行实际操作方可进取得一定性的进步,还要进行与组内人员之间的团结与协作。共同学习,共同克服困难,取得共同进步。

 

 

 

 

 

七、附录

  源代码:

#include <stdio.h>

#include <string.h>

#include <process.h>

#include <malloc.h>

#include <stdlib.h>

#include <conio.h>

#include <stdlib.h>

#include <iostream>

#define getb(type) (type*)malloc(sizeof(type))

using namespace std;

int usernowpride;//全局变量,当前用户类型

char usernowname[10];//全局变量,当前用户名

int nowlevel; //全局变量,当前目录层次

char usernowpath[200] = "\\\0"

//用户类型定义

struct user

{

char name[10];//用户名

int pride;//用户权限,1为管理员,0为普通用户

char pass[10];//用户密码

};

//定义空白区项

struct freeb

{

int number;

struct freeb * next;

};

struct freeb *fblk=NULL;//全局变量,系统空闲区链

//定义文件打开项

struct fileb

{

int parent;//所在父节点

char name[15];//文件名

int pride;//读写权限,0只读,1读写

int  rex;//读写状态,0为没有,1读2写

struct fileb * next;

};

struct fileb *flink=NULL;//全局变量,系统打开文件链

//定义文件索引项

struct findex

{

char name[15];

int number;

int parent;

char kind;

struct findex * next;

};

struct findex *fidx=NULL;//全局变量,文件索引链

//定义目录表项

struct dreitem

{

char name[25];//目录或者文件名称

int share; //共享数

int parent;//上层目录

int pride;//文件操作权限,0只读,1读写

int empty;//是否是空闲块,0为空闲块,1为非空

char kind;//类型,文件为f,目录为d

};

#include"FSMain.h"

//新建用户

bool createuser()

{

struct user newuser;

char name[10];

char pass[10];

int pride;

if(usernowpride!=1)

{

cout<<"当前用户没有新建用户的权限\n";

return false;

}

FILE *fp;

if((fp = fopen("user","ab+"))==NULL)

{

cout<<"用户表打开失败\n";

return false;

}

else

{

cout<<"请输入用户名:";

cin>>name;

if(strcmp(name,"root")==0)

{

printf("Error:此为超级管理员\n");

return false;

}

rewind(fp);

while(!feof(fp))

{

fread(&newuser,sizeof(struct user),1,fp);

if(strcmp(newuser.name,name)==0)

{

cout<<"该用户名已经存在\n";

fclose(fp);

return false;

}

}

cout<<"请输入用户密码:";

cin>>pass;

cout<<"请输入用户权限(0普通用户,1管理员):";

cin>>pride;

strcpy(newuser.name,name);

strcpy(newuser.pass,pass);

newuser.pride=pride;

// FILE fpuser;//为新建用户建立用户目录文件

if(!fopen(newuser.name,"ab+"))

{

cout<<"用户创建失败\n";

//如创建失败则把已经建立的用户目录删除

char cmd[20] = "DEL ";

strcat(cmd,newuser.name);

system(cmd);

fclose(fp);

return false;

}

if(!fwrite(&newuser,sizeof(struct user),1,fp))

{

cout<<"创建失败\n";

fclose(fp);

return false;

}

else

{

cout<<"用户创建成功\n";

fclose(fp);

return true;

}

}

}

//用户登陆

bool login()

{

char name[10];

char pass[10];

cout<<"\n\t\t\t○用户名:";

cin>>name;

cout<<"\t\t\t○密  码:";

cin>>pass;

if((strcmp("root",name)==0)&&(strcmp("123456",pass)==0))//管理员

{

usernowpride = 1;

strcpy(usernowname,"root");

return true;

}

FILE *fp=NULL;

struct user actuser;

if(!(fp=fopen("user","ab+")))

{

cout<<"Error:用户表错误\n";

return false;

}

rewind(fp);

while(!feof(fp))

{

fread(&actuser,sizeof(struct user),1,fp);

if((strcmp(actuser.name,name)==0)&&(strcmp(actuser.pass,pass)==0))

{

usernowpride = actuser.pride;//记录当前用户的权限

strcpy(usernowname,actuser.name);//记录当前用户的主路径

nowlevel=-1;//记录当前目录层次

fclose(fp);

//设置路径

if(strcmp(usernowpath,"\\")!=0) //不是根目录就添加斜杠

{

strcat(usernowpath,"\\");

}

strcat(usernowpath,usernowname);

return true;

}

}

cout<<"Error:用户名或密码无效,请核对后再输入\n";

fclose(fp);

return false;

}

//初始化空闲区链表以及文件索引链

void intlist()

{

//-----------------------------清空各链表

fidx=NULL;

fblk=NULL;

//-----------------------------

int i=0;

struct dreitem dnow;

FILE *fp;

if(!(fp=fopen(usernowname,"rb")))

{

cout<<"Error:打开用户目录失败\n";

return ;

}

else

{

int enp;

int sp;

fseek(fp,0,2);

enp=ftell(fp);

fseek(fp,0,0);

sp=ftell(fp);

if(sp==enp) return;

while(!feof(fp))

{

fread(&dnow,sizeof(struct dreitem),1,fp);

if(dnow.empty==0)

{

//把空闲区连到空闲链表中

struct freeb *fb =getb(struct freeb);

fb->number=i;

fb->next=NULL;

struct freeb *p=fblk;

if(p==NULL)

{

fblk=getb(struct freeb);

fblk->next=fb;

}

else

{

while(p->next!=NULL)

{

p=p->next;

}

p->next=fb;

}

}

else

{

//建立索引表

struct findex *fi =(struct findex*)malloc(sizeof(struct findex));

strcpy(fi->name,dnow.name);

fi->number=i;

fi->kind=dnow.kind;

fi->parent=dnow.parent;

fi->next=NULL;

struct findex *pi=fidx;

if(pi==NULL)

{

fidx=getb(struct findex);

fidx->next=fi;

}

else

{

while(pi->next!=NULL)

{

pi=pi->next;

}

pi->next=fi;

}

}

i++;

}

fclose(fp);

return ;

}

}

//新建目录

void newdrec(char ch)//输入参数为要建立的类型,f为文件,d为文件夹

{

struct dreitem dnow;

char name[15];

char pride;//权限,0只读,1读写

int i;//记录空闲区区号

bool cancrd = true;//用于判断是否有重名文件

cout<<"请输入名字:";

fflush(stdin);

scanf("%s",&name);

//判断是否已经存在相同名字的文件或者目录

struct findex *fi=fidx;

while(fi)

{

if((strcmp(fi->name,name)==0)&&(fi->parent==nowlevel)&&(fi->kind==ch))

{

cout<<"Error:此文件或者目录已经存在\n";

cancrd=false;

break;

}

fi=fi->next;

}

if(!cancrd) return;

cout<<"请输入权限(0只读,1读写):";

cin>>pride;

dnow.empty=0;

strcpy(dnow.name,name);

dnow.parent=nowlevel;

if(pride==‘0‘)

{

dnow.pride=0;

}

else

{

dnow.pride=1;

}

dnow.share=0;

dnow.kind=ch;

dnow.empty=1;

FILE *fp;

if(!(fp=fopen(usernowname,"rb+")))

{

cout<<"错误";

return ;

}

else

{

if(fblk==NULL||fblk->next==NULL) //空闲区没有就直接在文件添加

{

fseek(fp,0,2);

fwrite(&dnow,sizeof(struct dreitem),1,fp);

cout<<"创建成功\n";

fclose(fp);

return;

}

else

{

struct freeb *p=fblk->next;//拿第一个空闲区来存放文件

if(p!=NULL)

{

//fblk=p->next;

i = p->number;

fblk->next=p->next;

}

free(p);

fseek(fp,i*sizeof(struct dreitem),0);

fwrite(&dnow,sizeof(struct dreitem),1,fp);

cout<<"创建成功\n";

fclose(fp);

return;

}

}

}

//列表当前路径下的文件

void lsfile()

{

long ep;

FILE *fp;

struct dreitem drenow;

fp=fopen(usernowname,"rb");

fseek(fp,0,2);

ep=ftell(fp);

fseek(fp,0,0);

cout<<"Name\tPride\tKind\tShare\tParent\n";

while(ep!=ftell(fp))

{

fread(&drenow,sizeof(struct dreitem),1,fp);

if(drenow.parent==nowlevel&&drenow.empty!=0)

{

cout<<drenow.name<<"\t";

cout<<drenow.pride<<"\t";

cout<<drenow.kind<<"\t";

cout<<drenow.share<<"\t";

cout<<drenow.parent<<"\n";

}

}

cout<<"文件列表结束\n";

fclose(fp);

}

//目录后退

bool back()

{

if(nowlevel==-1)

{

cout<<"Error:当前已为用户根目录,无法再回退\n";

return false;

}

char name[15];

int i;

i=nowlevel;

struct dreitem drecnow;

FILE *fp;

fp=fopen(usernowname,"rb");

fseek(fp,i*sizeof(struct dreitem),0);

fread(&drecnow,sizeof(struct dreitem),1,fp);

fclose(fp);

strcpy(name,drecnow.name);

nowlevel=drecnow.parent;

char cc; //检测‘\0‘位置

int ccidx=0; //记录最好一个‘\‘位置

int j=0;

cc=usernowpath[j];

while(cc!=‘\0‘)

{

j++;

cc=usernowpath[j];

if(cc==‘\\‘)

{

ccidx=j;

}

}

if(ccidx!=0)

{

usernowpath[ccidx]=‘\0‘;

}

return true;

}

//进入路径

bool path(char chpath[15])

{

struct dreitem drenow;

char mypath[15];

int i=0;

strcpy(mypath,chpath);

if(strcmp(mypath,"..")==0)

{

if(back())

{

return true;

}

else

{

return false;

}

}

FILE *fp;

fp=fopen(usernowname,"rb");

while(!feof(fp))

{

fread(&drenow,sizeof(struct dreitem),1,fp);

if((strcmp(drenow.name,mypath)==0)&&(drenow.kind==‘d‘)&&(drenow.parent==nowlevel))

{

nowlevel=i;

fclose(fp);

if(strcmp(usernowpath,"\\")!=0) //不是根目录就添加斜杠

{

strcat(usernowpath,"\\");

}

strcat(usernowpath,mypath);

return true;

}

i++;

}

fclose(fp);

return false;

}

//进入路径完整版

void intopath()

{

int tempnl=nowlevel;

char tempunp[200];

strcpy(tempunp,usernowpath);

char wholepath[100];

char name[15];

cout<<"输入要进入的路径:";

cin>>wholepath;

int i=0;

char cc=wholepath[i];

while(cc!=‘\0‘)

{

int j=0;

name[j]=cc;

while(cc!=‘\0‘&&cc!=‘\\‘)

{

name[j]=cc;

j++;

i++;

cc=wholepath[i];

}

if(i!=0)

{

name[j]=‘\0‘;

if(!path(name))

{

cout<<"Error:路径输入错误,请核对\n";

//如果路径错误,则还原

nowlevel=tempnl;

strcpy(usernowpath,tempunp);

return;

}

}

if(cc==‘\0‘) break;

i++;

cc=wholepath[i];

}

}

//删除文件,递归删除文件夹和文件夹里面的内容

//删除文件

bool remove(int p)

{

bool isfind=false;

int i=0;

int temp=0;

struct dreitem drecnow;

FILE *fp;

fp=fopen(usernowname,"rb+");

long ep;

fseek(fp,0,2);

ep=ftell(fp);

fseek(fp,0,0);

while(ep!=ftell(fp))

{

fread(&drecnow,sizeof(struct dreitem),1,fp);

if(drecnow.parent==p)

{

isfind=true;

temp=p;

remove(i);

}

i++;

}

if(!isfind)

{

drecnow.empty=0;

strcpy(drecnow.name,"    ");

drecnow.parent=-1;

fseek(fp,p*sizeof(struct dreitem),0);

fwrite(&drecnow,sizeof(struct dreitem),1,fp);

fclose(fp);

return true;

}

else

{

remove(temp);

fclose(fp);

return false;

}

}

void del()

{

char name[15];

cout<<"输入要删除的文件:";

cin>>name;

findex *fb=fidx;//用于索引表

findex *fi;

fileb *fob=flink;//用于已打开文件链表

if(fb==NULL||fb->next==NULL)//搜索索引表

{

cout<<"Error:没有此文件\n";

return;

}

bool isit=true;

while(fb!=NULL&&fb->next!=NULL)

{

fi=fb;

fb=fb->next;

if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))

{

isit=false;

if(remove(fb->number))

{

fi->next=fb->next;

free(fb);

cout<<"该文件已被删除\n";

return;

}

}

}

if(isit)

{

cout<<"Error:没有此文件\n";

}

else

{

cout<<"该文件已被删除\n";

}

}

//打开文件

void openfile()

{

long ep;

int i=0;

FILE *fp;

struct dreitem drenow;

char name[15];

cout<<"输入要打开的文件名:";

cin>>name;

struct fileb *fb=flink;

while(fb!=NULL&&fb->next!=NULL)

{

fb=fb->next;

if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))

{

cout<<"Error:该文件已经打开\n";

return;

}

}

fp=fopen(usernowname,"rb"); //可用索引节点

fseek(fp,0,2);

ep=ftell(fp);

fseek(fp,0,0);

while(ep!=ftell(fp))

{

fread(&drenow,sizeof(struct dreitem),1,fp);

if((strcmp(drenow.name,name)==0)&&(drenow.parent==nowlevel)&&(drenow.kind==‘f‘))

{

//添加到打开链表

fileb *pb=getb(struct fileb);

strcpy(pb->name,name);

pb->parent=nowlevel;

pb->next=NULL;

pb->rex=0;

pb->pride=drenow.pride;

if(flink==NULL)

{

flink=getb(struct fileb);

flink->next=pb;

}

else

{

pb->next=flink->next;

flink->next=pb;

}

cout<<"文件已经打开\n";

fclose(fp);

//这里是否要更新显示已打开链表

return;

}

i++;

}

cout<<"Error:当前目录下无此文件,请核对\n";

fclose(fp);

}

//显示当前打开文件列表

void disfilelist()

{

if(flink==NULL||flink->next==NULL)

{

cout<<"当前打开文件队列空\n";

return;

}

else

{

cout<<"当前打开文件队列如下:(文件名|父节点|读写权限|读写状态)\n";

fileb *fb=flink;

while(fb!=NULL&&fb->next!=NULL)

{

fb=fb->next;

printf("%s|%d|%d|%d->",fb->name,fb->parent,fb->pride,fb->rex);

}

cout<<"**\n";

}

}

//关闭文件

void closefile()

{

char name[15];

cout<<"输入要关闭的文件:";

cin>>name;

if(flink==NULL||flink->next==NULL)

{

cout<<"Error:该文件没有打开\n";

return;

}

fileb *fb=flink;

fileb *ffb=NULL;

while(fb!=NULL&&fb->next!=NULL)

{

ffb=fb;

fb=fb->next;

if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))

{

ffb->next=fb->next;

free(fb);

cout<<"文件已经关闭\n";

return;

}

}

cout<<"Error:当前路径下找不到你要关闭的文件,请确定文件名已经路径是否正确\n";

}

//读写文件,该文件必须先打开后才可以进行读写操作

void rwfile(int ch) //读写文件,输入1为读文件,输入2为写文件

{

char name[15];

cout<<"要操作的文件名:";

cin>>name;

if(flink==NULL||flink->next==NULL)

{

cout<<"Error:该文件尚未打开\n"; //可以调用文件打开函数,以后先修改

return;

}

fileb *fb=flink;

while(fb!=NULL&&fb->next!=NULL)

{

fb=fb->next;

if((strcmp(fb->name,name)==0)&&(fb->parent==nowlevel))

{

//char ch;

if(fb->rex!=ch&&fb->rex!=0)

{

if(ch==2)

{

if(fb->pride!=1)

{

cout<<"Error:该文件只读,没有写权限\n";

return;

}

else

{

cout<<"当前文件正在读进程,是否终止读进程进行写?(y OR n):";

}

}

else

{

cout<<"当前文件正在写进程,是否终止写进程进行读?(y OR n):";

}

fflush(stdin);

cin>>ch;

if(ch==‘y‘||ch==‘Y‘)

{

if(ch==2)

{

fb->rex=1;

cout<<"文件正在读...\n";

}

else

{

fb->rex=2;

cout<<"文件正在写...\n";

}

}

}

else

{

if(ch==2&&fb->pride!=1)

{

cout<<"Error:该文件只读,没有写权限\n";

return;

}

fb->rex=ch;

if(ch==1)

{

cout<<"文件正在读...\n";

}

else

{

cout<<"文件正在写...\n";

}

}

return;

}

}

}

//设置共享

void setshare()

{

cout<<"要共享的文件:";

}

//显示当前路径

void dispathlist()

{

cout<<usernowpath<<endl;

}

//注销

void logout()

{

strcpy(usernowname,"  ");

nowlevel=-1;

fblk=NULL;

fidx=NULL;

strcpy(usernowpath,"\\");

flink=NULL;

}

//修改用户类型

void setpride()

{

char name[15];

cout<<"输入用户名字:";

cin>>name;

if((strcmp("root",name)==0))//超级用户

{

cout<<"Error:超级管理员权限不可以更改\n";

return ;

}

FILE *fp=NULL;

struct user actuser;

if(!(fp=fopen("user","rb+")))

{

cout<<"Error:用户表错误\n";

return ;

}

rewind(fp);

long np;

while(!feof(fp))

{

np=ftell(fp);

fread(&actuser,sizeof(struct user),1,fp);

if((strcmp(actuser.name,name)==0))

{

if(actuser.pride==1)

{

int pp=1;

cout<<"该用户是管理员\n输入0设置普通用户:";

cin>>pp;

if(pp==0)

{

actuser.pride=0;

}

}

else if(actuser.pride==0)

{

int pp=0;

cout<<"该用户是普通用户\n输入1设置为管理员:";

cin>>pp;

{

if(pp==1)

{

actuser.pride=1;

}

}

}

fseek(fp,np,0);

fwrite(&actuser,sizeof(struct user),1,fp);

fclose(fp);

return;

}

}

}

int main()

{

int choince;

while(1)

{

system("cls");

while(1)

{

system("cls");

printf("\n\n");

printf("\t  ***********************************************\n");

printf("\t  *      多用户多级目录文件系统的实现        *\n");

printf("\t  ***********************************************\n");

printf("\t  +                                + \n");

printf("\t  +   学号:201358503230  姓名:田庆      + \n");

printf("\t  +                       +\n");

printf("\t  ***********************************************\n");

printf("\t       *********用│║户│║登│║录*********\n");

printf("\t  ***********************************************\n");

if(login()) break;

}

if(strcmp(usernowname,"root")==0)

{

system("cls");

printf("超级管理员,欢迎你^_^\n");

printf("************************************************************************\n");

printf("1.新建用户  2.删除用户  3.修改用户  4.注销\n");

printf("************************************************************************\n");

printf(":) ");

bool lout=false;

while(1)

{

fflush(stdin);

scanf("%d",&choince);

switch(choince)

{

case 1:

createuser();

break;

case 2:

printf("该功能尚未实现:<\n");

break;

case 3:

setpride();

break;

case 4:

char out;

printf("真的要注销吗?(y OR n):");

fflush(stdin);

scanf("%c",&out);

if(out==‘y‘||out==‘Y‘)

{

lout=true;

logout();

}

break;

default:

printf("Error:错误命令\n");

break;

}

printf(":) ");

if(lout)

break;

}

}

else

{

intlist();

system("cls");

cout<<"%s,欢迎你^_^\n"<<usernowname;

cout<<"************************************************************************\n";

printf("1.文件列表  2.新建    3.进入路径  4.删除    5.新建用户\n");

printf("6.打开文件  7.关闭文件  8.读文件   9.写文件   10.回退上层\n");

printf("11.当前路径 12.清屏       13.注销\n");

printf("************************************************************************\n");

printf(":) ");

bool lout=false;

while(1)

{

fflush(stdin);

scanf("%d",&choince);

switch(choince)

{

case 1:

lsfile();

break;

case 2:

int cc;

printf("1.新建文件夹 2.新建文件");

scanf("%d",&cc);

if(cc==1)

{

newdrec(‘d‘);

}

if(cc==2)

{

newdrec(‘f‘);

}

intlist();

break;

case 3:

intopath();

break;

case 4:

del();

intlist();

break;

case 5:

createuser();

break;

case 6:

openfile();

disfilelist();

break;

case 7:

closefile();

disfilelist();

break;

case 8:

rwfile(1);

break;

case 9:

rwfile(2);

break;

case 10:

back();

break;

case 11:

dispathlist();

break;

case 12:

system("cls");

printf("%s,欢迎你^_^\n",usernowname);

printf("************************************************************************\n");

printf("1.文件列表  2.新建        3.进入路径  4.删除        5.新建用户\n");

printf("6.打开文件  7.关闭文件  8.读文件   9.写文件   10.回退上层\n");

printf("11.当前路径 12.清屏       13.注销\n");

printf("************************************************************************\n");

break;

case 13:

char out;

printf("真的要注销吗?(y OR n):");

fflush(stdin);

scanf("%c",&out);

if(out==‘y‘||out==‘Y‘)

{

lout=true;

logout();

}

break;

default:

printf("Error:错误命令\n");

break;

}

printf(":) ");

if(lout)

break;

}

}

}

printf("完成\n");

return 0;

}

 

 

 

 

 

 

 

 

 

时间: 2024-08-14 07:51:41

文件系统的设计与实现(操作系统课程设计)的相关文章

操作系统课程设计摸鱼全纪录

读了几年,都没留下什么东西方便学弟学妹借鉴.感觉这个大三上学期的操作系统课程设计恰好在寒假,大概是最后一次机会了,写点东西. 首先老师要求用的是: ubuntu-18.04 fuse-2.7.0 这种事情当然是使用虚拟机啦!下载并安装VMware,然后下载并安装ubuntu-18.04,拷贝老师给的fuse-2.7.0进去解压.找找看怎么安装. 看了一圈,发现有个README是看得懂的,里面有很多话,我相信来看我博客的人也是摸鱼混及格的,那当然只关心下面的: 那么打开一个Terminal,输入对

操作系统课程设计--Linux平台哲学家问题

哲学家问题是操作系统中资源分配的经典问题 linux平台下的系统api不同于Windows下的实现 要求:一个正确的哲学家程序(不会发生死锁) 一个错误的哲学家程序(会发生死锁) 系统环境:ElementaryOS wrong.c #include<stdio.h> #include<stdlib.h> #include<sys/ipc.h> #include<sys/msg.h> #include<sys/types.h> #include&l

操作系统课程设计 消息缓冲队列通信

消息缓冲队列通信机制其基本思想是根据“生产者——消费者”原理,利用内存中公用消息缓冲区实现进程间的信息交换. 在这种通信机制中,首先需要在内存中开辟若干空闲消息缓冲区,用以存放要通信的消息.每当一个进程需要向另一个进程发送消息时,便向系统申请一个空闲消息缓冲区,并把已准备好的消息复制到该缓冲区,然后把该消息缓冲区插入到接收进程的消息队列中,最后通知接收进程.接收进程接收到发送进程发来的通知后,从本进程的消息队列中摘下一消息缓冲区,取出其中的信息,然后把消息缓冲区作为空闲消息缓冲区归还给系统.系统

java课程设计——扫雷

一.团队课程设计博客链接: 二.个人负责模块或任务说明: 模块:文件操作  Minefield类实现 三.自己的代码提交记录截图 四.自己负责模块或任务详细说明 1.Minefield类实现 Minefield是我们主要的算法实现模块.在正式开始扫雷游戏时,看见的是如下界面:一格一格的蓝色格子表示可点击区域. 点击后,分三个情况:1)标记该区域为雷(右击)2)该区域是点击到雷,游戏结束 3)该区域无雷,显示区域九宫格范围内的雷的个数.(此处有9种情况)4)游戏提前结束,显示所有未被点击的雷.下图

java课程设计---个人博客 彩票抽奖程序 201821123098 钟海清

目录 1.团队课程设计博客链接 2.个人负责模块或任务说明 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 滚动抽奖 自动注册 读取表格信息 5.课程设计感想 1.团队课程设计博客链接 https://www.cnblogs.com/zhonghaiqing/p/12173066.html 2.个人负责模块或任务说明 我主要负责主要负责管理员类,实现滚动抽奖.自动注册购买彩票以及查看中奖信息和用户信息的方法 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 滚动抽奖 代码

20155114许星霖《远程安防监控系统》课程设计个人报告

一.对任务的理解 1.项目概述 本项目需要实现以嵌入式Web服务器为核心的视频监控系统. 摄像头采集的到的图像经过压缩后,传到内置的web服务器中.用户只需要通过浏览器就可以观看摄像头采集到的数据. 2.系统架构 该项目基本可以看作B/S架构,由有三部分组成: (1)核心服务端:其实是客户端(严格意义上说,PC上的浏览器才是客户端)一台普通的PC机,需要与前端数据中心在同一局域网中,然后通过浏览器对系统进行监控和设置. (2)前端数据中心:FS4412开发平台,可以连接摄像头.GPRS.zigB

大二第一学期期末课程设计 2015.12.28

<数据结构与算法>课程设计教学任务书 --2015-2016(一)   课程设计周数:2周                                                              一.课程设计的目的 数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科.数据结构是介于数学.计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计.数据库.操作系统.编译原理及人工智能等的重要基础,广泛的应用于信息学

JavaWeb网上商城课程设计的反思

不知道从什么时候起,我爱上了写博客,对之前学得的只是进行反思.写了几天课程设计,代码量量8.9千左右. 然后下面文字是我在博客上复制过来的,说得很详细 MVC(Model View Controller)设计模式在JavaFX中有着比Swing更好的表现方式.它使得程序界面设计和程序逻辑设计完全分开,便于代码的可读性和以后的可维护性. JavaEE体系架构采用传统的MVC设计模式,分为Model.View.Controller三层,其中:Model即模型层,定义数据模型和业务逻辑.为了将数据访问

asp.net,java,jsp,安卓Android,苹果ios,php,vb.net,c#免费毕业课程设计源码共享网盘下载

百度网盘下载地址1:  http://pan.baidu.com/s/1o67fybC 百度网盘下载地址2: http://pan.baidu.com/s/1kTxckmF163网盘下载地址:http://home.163disk.com/shuangyulin file://E:\计算机设计参考!!!!!!!!!!!\资料 (4 folders, 0 files, 0 bytes, 641.25 MB in total.) ├─QQ254540457 (0 folders, 49 files,