操作系统实验三文件管理.docx

上传人:b****7 文档编号:8669416 上传时间:2023-02-01 格式:DOCX 页数:34 大小:216.09KB
下载 相关 举报
操作系统实验三文件管理.docx_第1页
第1页 / 共34页
操作系统实验三文件管理.docx_第2页
第2页 / 共34页
操作系统实验三文件管理.docx_第3页
第3页 / 共34页
操作系统实验三文件管理.docx_第4页
第4页 / 共34页
操作系统实验三文件管理.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

操作系统实验三文件管理.docx

《操作系统实验三文件管理.docx》由会员分享,可在线阅读,更多相关《操作系统实验三文件管理.docx(34页珍藏版)》请在冰豆网上搜索。

操作系统实验三文件管理.docx

操作系统实验三文件管理

操作系统实验三--文件管理

《计算机操作系统》课程实验报告

 

题目

文件管理

学院:

计算机学院 

专业:

计算机科学与技术

姓名

班级

学号

 

2016年12月22日

#include

#defineMaxUser100//定义最多有100个用户

#defineMaxDisk512*1024//定义磁盘空间大小

#definecommandAmount//对文件操作的指令数

//存储空间管理有关结构体和变量

chardisk[MaxDisk];//模拟512K的磁盘存储空间

typedefstructdistTable//磁盘块结构体

{

intmaxlength;

intstart;

intuseFlag;

distTable*next;

}diskNode;

diskNode*diskHead;

typedefstructfileTable//文件快结构体

{

charfileName[10];

intstart;//文件在磁盘存储空间的起始地址

intlength;//文件内容长度

intmaxlength;//文件的最大长度

charfileKind[3];//文件的属性--读写方式

structtm*timeinfo;

boolopenFlag;//判断是否有进程打开了文件

};

intused=0;//定义MFD目录中用已有的用户数

//两级目录结构体

typedefstructuser_file_directory//用户文件目录文件UFD

{

fileTable*file;

user_file_directory*next;

}UFD;

 

typedefstructmaster_file_directory//主目录文件

{

charuserName[10];

charpassword[10];

UFD*user;

}MFD;

MFDuserTable[MaxUser];

intuserID=-1;//用户登录的ID号,值为-1时表示没有用户登录

 

//文件管理

voidfileCreate();//创建文件

voidfileDelet();//删除文件

voidfileWrite();//写文件

voidfileRead();//读文件

voidfileRename();//重命名文件

voidfileFind();//查询文件

voidfileDir();//显示某一用户所有文件

voidfileClose();//关闭已打开的文件

voidfileChange();//修改文件的读写方式

intrequestDist(int&stratPostion,intmaxlength);//磁盘分配查询

voidinitDisk();//初始化磁盘

voidfreeDisk(intstartPostion);//磁盘空间释放

voiddiskShow();//显示磁盘使用情况

voidinitFile();

//用户管理

voiduserCreate();

intlogin();

voiduserDelet();

voiduserFind();

//用户登陆主界面

voidwebUser();

//用户内部界面

voidwebFile();

intmain()

{

initDisk();

initFile();

webUser();

return0;

}

voidwebUser()

{

inti;

while

(1)

{

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

printf("1.创建用户2.登陆用户\n");

printf("3.删除用户4.查看用户\n");

printf("0.退出系统\n");

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

printf("请输入操作号\n");

scanf("%d",&i);

switch(i)

{

case0:

exit(0);break;

case1:

userCreate();break;

case2:

userID=login();

if(userID!

=-1)

{

webFile();

}

break;

case3:

userDelet();break;

case4:

userFind();break;

default:

printf("您输入的命令有误,请重新选择\n");

system("pause");

system("cls");

break;

}

}

}

voiduserCreate()

{

charc;

charuserName[10];

inti;

if(used

{

printf("请输入用户名:

");

for(i=0;c=_getch();i++)

{

if(c==13)break;

else

userName[i]=c;

printf("%c",c);

}

userName[i]='\0';

for(i=0;i

{

if(!

strcmp(userTable[i].userName,userName))

{

printf("\n");

printf("该用户名已存在,创建用户失败\n");

system("pause");

system("cls");

return;

}

}

strcpy(userTable[used].userName,userName);

printf("\n");

printf("请输入密码:

");

for(i=0;c=_getch();i++)

{

if(c==13)break;

else

userTable[used].password[i]=c;

printf("*");

}

userTable[userID].password[i]='\0';

printf("\n");

printf("创建用户成功\n");

used++;

system("pause");

system("cls");

}

else

{

printf("创建用户失败,用户已达到上限\n");

system("pause");

system("cls");

}

fflush(stdin);

}

intlogin()

{

charname[10],psw[10];

charc;

inti,times;

printf("请输入用户名:

");

for(i=0;c=_getch();i++)

{

if(c==13)break;

else

name[i]=c;

printf("%c",c);

}

name[i]='\0';

for(i=0;i

{

if(!

strcmp(userTable[i].userName,name))

break;

}

if(i==used)

{

printf("\n您输入的用户名不存在\n");

system("pause");

system("cls");

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;

else

psw[i]=c;

printf("*");

}

printf("\n");

for(i=0;i

{

if(!

strcmp(psw,userTable[i].password))

{

printf("用户登录成功\n");

system("pause");

system("cls");

break;

}

}

if(i==used)

{

printf("您输入的密码错误,您还有%d次输入机会\n",2-times);

if(times==2)exit(0);

}

elsebreak;

}

fflush(stdin);

returni;

}

voiduserDelet()

{

intstatePos;

UFD*q;

charname[10],psw[10];

charc;

inti,times,j;

printf("请输入用户名:

");

for(i=0;c=_getch();i++)

{

if(c==13)break;

else

name[i]=c;

printf("%c",c);

}

name[i]='\0';

for(i=0;i

{

if(!

strcmp(userTable[i].userName,name))

break;

}

if(i==used)

{

printf("\n您输入的用户名不存在\n");

system("pause");

system("cls");

}

else

{

q=userTable[i].user->next;

while(q)

{

if(q->file!

=NULL)

{

statePos=q->file->start;

}

freeDisk(statePos);

q=q->next;

}

for(i,j=i+1;i<=used;j++,i++)

{

userTable[i]=userTable[j];

}

printf("\n用户删除成功\n");

system("pause");

system("cls");

used--;

}

}

voiduserFind()

{

inti;

printf("用户列表:

\n");

for(i=0;i

{

printf("%s\n",userTable[i].userName);

}

system("pause");

system("cls");

}

voidwebFile()

{

inti;

charname[10],kind[3];

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

printf("1.创建2.删除\n");

printf("3.写入文件4.查看文件内容\n");

printf("5.重命名6.查看文件属性\n");

printf("7.查看用户文件8.关闭文件\n");

printf("9.修改文件权限10.查看磁盘使用情况\n");

printf("11.返回上级目录12.退出系统\n");

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

printf("请输入操作号:

");

scanf("%d",&i);

while

(1)

{

switch(i)

{

case1:

fileCreate();

break;

case2:

fileDelet();

break;

case3:

fileWrite();

break;

case4:

fileRead();

break;

case5:

fileRename();

break;

case6:

fileFind();

break;

case7:

fileDir();

break;

case8:

fileClose();

break;

case9:

fileChange();

break;

case10:

diskShow();

break;

case11:

system("cls");

webUser();

break;

case12:

exit(0);

break;

default:

printf("输入错误请重新输入:

");

break;

}

scanf("%d",&i);

}

}

voidfileCreate()

{

time_trawtime;

intstartPos;

charc;

charfileName[10],fileKind[10],fileLength[10];

charcommand[50];

intlength;

//inti,k,j;

printf("创建文件格式为名称长度权限(r、w、rw):

");

fflush(stdin);

gets(command);

inti,k,j;

for(i=0,k=0;command[i]!

='';i++,k++)

fileName[k]=command[i];

fileName[k]='\0';

k=i;

for(i=k+1,k=0;command[i]!

='';i++,k++)

fileLength[k]=command[i];

fileLength[k]='\0';

k=i;

j=1;

length=0;//初始化文件长度

for(i=strlen(fileLength)-1;i>=0;i--)//把字符串转换为十进制

{

length+=(fileLength[i]-48)*j;

j*=10;

}

for(i=k+1,k=0;command[i]!

=''&&command[i]!

='\0';i++,k++)

fileKind[k]=command[i];

fileKind[k]='\0';

 

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));

strcpy(fileNode->file->fileName,fileName);

strcpy(fileNode->file->fileKind,fileKind);

fileNode->file->maxlength=length;

fileNode->file->start=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");

}

}

voidinitDisk()

{

diskHead=(diskNode*)malloc(sizeof(diskNode));

diskHead->maxlength=MaxDisk;

diskHead->useFlag=0;

diskHead->start=0;

diskHead->next=NULL;

}

voidinitFile()

{

inti;

for(i=0;i

{

userTable[i].user=(UFD*)malloc(sizeof(UFD));

userTable[i].user->next=NULL;

}

}

intrequestDist(int&startPostion,intmaxLength)

{

intflag=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;

}

returnflag;

}

 

voidfreeDisk(intstartPostion)

{

diskNode*p;

for(p=diskHead;p!

=NULL;p=p->next)

{

if(p->start==startPostion)

break;

}

p->useFlag=false;

}

voidfileDelet()

{

charfileName[10],command[50];

inti,k;

fflush(stdin);

printf("输入文件名称:

");

gets(command);

for(i=0,k=0;command[i]!

='\0';i++,k++)

fileName[k]=command[i];

fileName[k]='\0';

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->start);//磁盘空间回收

free(temp);

printf("文件删除成功\n");

system("pause");

}

else

{

printf("该文件正在被占用,删除失败\n");

system("pause");

}

}

else

{

printf("没有找到该文件,请检查输入的文件名是否正确\n");

system("pause");

}

}

voidfileRead()

{

intstartPos,l

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1