操作系统文件系统管理.docx
- 文档编号:8106833
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:33
- 大小:20.56KB
操作系统文件系统管理.docx
《操作系统文件系统管理.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统管理.docx(33页珍藏版)》请在冰豆网上搜索。
操作系统文件系统管理
Unix&Linux文件系统
操作系统实验报告
[实验内容]
【任务】
为Linux系统设计一个简单的二级文件系统。
要求做到以下几点:
可以实现下列几条命令:
1.
用户登录login
logout用户注销新建文件Create
删除文件Delete
打开文件Open
1.
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;
2.
_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.程序代码:
3.
#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();//读取已有用户信息
4.
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],
m);
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;
5.
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(\
%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;
}
}
6.
if(j==0)
{
if(ch=='')
{
i=-1;
j++;
}
elseif(ch=='\n')
{
command[i]=0;
break;
}
else
{
command[i]=ch;
}
}
}
printf(\
);
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) 7. { 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); } 8. else { printf(Donothasnormaldirname,createfailed! \n); } break; case8: HelpFile(); break; } TraverseFolder(currentDir); } } } voidHelpFile() { 牰湩晴尨—————————————————————————————————————\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); 牰湩晴尨————————————————————————————————————————\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); 9. 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]! ='.')) 10. { 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); printf(Files: \n); while(fi->nextFile! =NULL) { printf(%s,fi->_FileName); fi=fi->nextFile; } printf(\ \n); _Folder*fo; fo=firstFolder; printf(Folders: \n); while(fo->nextFolder! =NULL) { printf(%s,fo->_FolderName); fo=fo->nextFolder; } printf(\ ); printf(****************************************************************\n); } voidDelete(charfName[]) { printf(%s,fName); intisExist=0; charfSavePath[255];//文件或文件夹存储完整路径 11. 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(\ File\%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(\ Folder\%s\deletesuccess! \n,fName); } TraverseFolder(currentDir); } voidCatFile(charfName[]) { charch; 12. 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, ); if(fp==NULL) { printf(Filenotexist! \n); } else { printf(\ %s\'sContent: ****************************\n,fName); ch=fgetc(fp); while(ch! =EOF) { if(ch=='\n') { printf(\ ); } else { printf(%c,ch); } ch=fgetc(fp); } pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统 管理