操作系统文件系统管理.docx
- 文档编号:9302711
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:35
- 大小:19.87KB
操作系统文件系统管理.docx
《操作系统文件系统管理.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统管理.docx(35页珍藏版)》请在冰豆网上搜索。
操作系统文件系统管理
Unix&Linux文件系统
操作系统实验报告
[实验内容]
【任务】
为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:
1.可以实现下列几条命令:
login
用户登录
logout
用户注销
Create
新建文件
Delete
删除文件
Open
打开文件
Close
关闭文件
Read
读文件
Write
写文件
dir
列目录
2.列目录时要列出文件名,物理地址,保护码和文件长度。
3.源文件可以进行读写保护。
【程序设计】
1.本文件系统采用两级目录,其中第一级对应用户帐号。
第二级对应用户帐号下面的文件。
本文件系统未考虑文件的共享与保护。
2.本程序在Win2000下,用VisualC++6.0编译运行。
但只需稍加修改即可在Linux下运行。
3.代码(见源程序)
4.主要数据结构:
#defineFILENAME_LENGTH10//最大用户数
#definecommandAmount9//指令数
char_user[20];//当前用户名
charcurrentDir[255];//当前所在目录
typedefstructUserMess//所有用户信息
{
char_UserName[20];
char_UserPwd[20];
structUserMess*nextUser;
}_UserMess;
_UserMess*firstUser;
typedefstructFolderDir//目录路径信息
{
char_Dir[255];
structFolderDir*fatherDir;
}_RootDir;
_RootDir*rootFolder;
typedefstructFolder//当前目录子目录信息
{
char_FolderName[100];
structFolder*nextFolder;
}_Folder;
_Folder*firstFolder;
typedefstructFile//当前目录下文件信息
{
char_FileName[100];
structFile*nextFile;
}_File;
_File*firstFile;
【程序说明】
1.功能函数设计:
voidinit();//初始化部分内容
intReadUserMess();//读取已有用户信息
intuserCreate(intsumUsers);//用户注册
intlogin();//登录
voidcreateRootFolder(charusername[]);//为新用户分配空间
voidTraverseFolder(charpath[]);//遍历文件及文件夹
voidListFileAndFolder();//显示当前文件夹下所有文件
voidChangeDir(charfolderName[]);//目录跟换
voidDelete(charfName[]);//删除文件或文件夹
voidCatFile(charfName[]);//打开文件,查看文件内容
voidAddContent(charfName[]);//向文件写入内容
voidCreateFile(charfName[]);//创建文件
voidCreateFolder(charfolderName[]);//创建文件夹
voidHelpFile();//帮助文件
2.程序代码:
#include
#include
#include
#include
#include
#include
#defineMaxUser20
#definecommandAmount9
char_user[20];
charcurrentDir[255];
typedefstructUserMess
{
char_UserName[20];
char_UserPwd[20];
structUserMess*nextUser;
}_UserMess;
_UserMess*firstUser;
typedefstructFolderDir
{
char_Dir[255];
structFolderDir*fatherDir;
}_RootDir;
_RootDir*rootFolder;
typedefstructFolder
{
char_FolderName[100];
structFolder*nextFolder;
}_Folder;
_Folder*firstFolder;
typedefstructFile
{
char_FileName[100];
structFile*nextFile;
}_File;
_File*firstFile;
voidinit();//初始化部分内容
intReadUserMess();//读取已有用户信息
intuserCreate(intsumUsers);//用户注册
intlogin();//登录
voidcreateRootFolder(charusername[]);//为新用户分配空间
voidTraverseFolder(charpath[]);//遍历文件及文件夹
voidListFileAndFolder();//显示当前文件夹下所有文件
voidChangeDir(charfolderName[]);//目录跟换
voidDelete(charfName[]);//删除文件或文件夹
voidCatFile(charfName[]);//打开文件,查看文件内容
voidAddContent(charfName[]);//向文件写入内容
voidCreateFile(charfName[]);//创建文件
voidCreateFolder(charfolderName[]);//创建文件夹
voidHelpFile();//帮助文件
intmain()
{
intlogined=0;
intselect;
charch;
charorder[commandAmount][9];
strcpy(order[0],"create");
strcpy(order[1],"rm");
strcpy(order[2],"cat");
strcpy(order[3],"write");
strcpy(order[4],"ls");
strcpy(order[5],"cd");
strcpy(order[6],"exit");
strcpy(order[7],"mkdir");
strcpy(order[8],"help");
charcommand[15],command_str1[255];
inti,j;
init();
intuserNum=ReadUserMess();
//printf("Usercount:
%d\n",userNum);
intisright=1;
while(isright==1)
{
printf("********************************************\n");
printf("1、Creatuser\n");
printf("2、login\n");
printf("********************************************\n");
printf("Pleasechoocethefunctionkey:
>");
intchoice;
setbuf(stdin,NULL);
scanf("%d",&choice);
if(choice==1)
{
logined=userCreate(userNum);
isright=0;
}
elseif(choice==2)
{
logined=login(userNum);
isright=0;
}
}
TraverseFolder(currentDir);
if(logined==1)
{
while(logined)
{
//command[0]=0;
for(i=0;i<15;i++)
{
command[i]=0;
}
for(i=0;i<255;i++)
{
command_str1[i]=0;
}
//command_str1[0]=0;
setbuf(stdin,NULL);
printf("\n%s:
~$",_user);
for(i=0,j=0;ch=getchar();i++)
{
if(j==1)
{
if(ch==''||ch=='\n')
{
command_str1[i]=0;
break;
}
else
{
command_str1[i]=ch;
}
}
if(j==0)
{
if(ch=='')
{
i=-1;
j++;
}
elseif(ch=='\n')
{
command[i]=0;
break;
}
else
{
command[i]=ch;
}
}
}
printf("\n");
for(i=0;i { if(! strcmp(command,order[i])) { select=i; break; } } if(i==commandAmount) { printf("Undefinedcommand! \n"); continue; } switch(select) { case0: if(command_str1! =NULL) { CreateFile(command_str1); } else { printf("Donothasnormalfilename,createfailed! \n"); } break; case1: if(command_str1! =NULL) { Delete(command_str1); } else { printf("Donothasnormalfileordirname,createfailed! \n"); } break; case2: if(command_str1! =NULL) { CatFile(command_str1); } else { printf("Donothasnormalfilename,createfailed! \n"); } break; case3: if(command_str1! =NULL) { AddContent(command_str1); } else { printf("Donothasnormalfilename,createfailed! \n"); } break; case4: TraverseFolder(currentDir); ListFileAndFolder(); break; case5: if(command_str1! =NULL) { ChangeDir(command_str1); } else { printf("Donothasnormaldirname,createfailed! \n"); } break; case6: logined=0; break; case7: if(command_str1! =NULL) { CreateFolder(command_str1); } else { printf("Donothasnormaldirname,createfailed! \n"); } break; case8: HelpFile(); break; } TraverseFolder(currentDir); } } } voidHelpFile() { printf("—————————————————————————————————————\n"); printf("create-创建格式: createa1,将创建名为a1的文件\n"); printf("rm-删除格式: rma1,将删除名为a1的文件或文件夹\n"); printf("cat-查看文件内容格式: cata1,显示a1的内容\n"); printf("write-写入格式: writea1\n"); printf("ls-显示文件格式: ls,显示所有文件\n"); printf("cd-跳转目录格式: cddir或cd..dir为路径\n"); printf("exit-退出程序格式: exit\n"); printf("mkdir-创建文件夹格式: mkdira1,将创建文件夹a1\n"); printf("help-查看帮助格式: help\n"); printf("————————————————————————————————————————\n"); } voidCreateFile(charfName[]) { charfSavePath[255]; strcpy(fSavePath,currentDir); strcat(fSavePath,"/"); strcat(fSavePath,fName); _File*fi; fi=firstFile; while(fi->nextFile! =NULL) { if(strcmp(fi->_FileName,fName)==0) { printf("FilesisExist! Createfailed! \n"); return; } fi=fi->nextFile; } FILE*fp; fp=fopen(fSavePath,"w"); if(fp==NULL) { printf("Filecreatefailed! \n"); } else { printf("Filecreatesuccess! \n"); } TraverseFolder(currentDir); } voidTraverseFolder(charpath[]) { _Folder*p; _File*q; firstFolder=(_Folder*)malloc(sizeof(_Folder)); firstFolder->nextFolder=NULL; firstFile=(_File*)malloc(sizeof(_File)); firstFile->nextFile=NULL; structdirent*entry=NULL; DIR*pDir; pDir=opendir(path); while(NULL! =(entry=readdir(pDir))) { if(entry->d_type==8) { q=(_File*)malloc(sizeof(_File)); strcpy(q->_FileName,entry->d_name); q->nextFile=firstFile; firstFile=q; //printf("%s",entry->d_name); } elseif(entry->d_type==4) { if((strcmp(entry->d_name,".")! =0)&&(strcmp(entry->d_name,"..")! =0)&&(entry->d_name[0]! ='.')) { p=(_Folder*)malloc(sizeof(_Folder)); strcpy(p->_FolderName,entry->d_name); p->nextFolder=firstFolder; firstFolder=p; //printf("Folder: %s",entry->d_name); } } //d_type: 4表示目录,8表示文件 } } voidListFileAndFolder() { _File*fi; fi=firstFile; printf("\n************************************************************\n"); printf("Files: \n"); while(fi->nextFile! =NULL) { printf("%s",fi->_FileName); fi=fi->nextFile; } printf("\n\n"); _Folder*fo; fo=firstFolder; printf("Folders: \n"); while(fo->nextFolder! =NULL) { printf("%s",fo->_FolderName); fo=fo->nextFolder; } printf("\n"); printf("****************************************************************\n"); } voidDelete(charfName[]) { printf("%s",fName); intisExist=0; charfSavePath[255];//文件或文件夹存储完整路径 strcpy(fSavePath,currentDir); _File*fi; fi=firstFile; while(fi->nextFile! =NULL) { if(strcmp(fi->_FileName,fName)==0) { isExist=1; break; } fi=fi->nextFile; } if(isExist==1) { strcat(fSavePath,"/"); strcat(fSavePath,fName); remove(fSavePath); printf("\nFile\"%s\"deletesuccess! \n",fName); } _Folder*fo; fo=firstFolder; while(fo->nextFolder! =NULL) { if(strcmp(fo->_FolderName,fName)==0) { isExist=1; break; } fo=fo->nextFolder; } if(isExist==1) { strcat(fSavePath,"/"); strcat(fSavePath,fName); rmdir(fSavePath); printf("\nFolder\"%s\"deletesuccess! \n",fName); } TraverseFolder(currentDir); } voidCatFile(charfName[]) { charch; intisExist=0; charfSavePath[255];//文件或文件夹存储完整路径 strcpy(fSavePath,currentDir); _File*fi; fi=firstFile; while(fi->nextFile! =NULL) { if(strcmp(fi->_FileName,fName)==0) { isExist=1; break; } fi=fi->nextFile; } if(isExist==1) { strcat(fSavePath,"/"); strcat(fSavePath,fName); FILE*fp; fp=fopen(fSavePath,"r"); if(fp==NULL) { printf("Filenotexist! \n"); } else { printf("\n%s\'sContent: ****************************\n",fName); ch=fgetc(fp); while(ch! =EOF) { if(ch=='\n') { printf("\n"); } else { printf("%c",ch); } ch=fgetc(fp); } printf("\n***End*************************************\n"); } } } voidCreateFolder(charfolderName[]) { intdir; charfolderPath[255]; _Folder*fo; fo=firstFolder; while(fo->nextFolder! =NULL) { if(strcmp(fo->_FolderName,folderName)==0) { printf("FolderisExist! Createfailed! \n"); return; } fo=fo->nextFolder; } strcpy(folderPath,currentDir); strcat(folderPath,"/"); strcat(folderPath,folderName); dir=mkdir(folderPath,0777); if(dir==-1) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统 管理