2022年操作系统实验文件管理C++代码 .pdf
《2022年操作系统实验文件管理C++代码 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验文件管理C++代码 .pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include#include#include#include#include using namespace std;#define BLKSIZE 512/数据块的大小#define BLKNUM 512/数据块的块数#define INODESIZE 32/i 节点的大小#define INODENUM 32/i 节点的数目#define FILENUM 8/打开文件表的数目/用户typedef struct char user_name10;/用户名char password10;/密码 User;/i 节点typedef struct short inum;/文件 i 节点号cha
2、r file_name10;/文件名char type;/文件类型char user_name10;/文件所有者short iparent;/父目录的i 节点号short length;/文件长度short address2;/存放文件的地址 Inode;/打开文件表typedef struct short inum;/i 节点号char file_name10;/文件名short mode;/读写模式(1:read,2:write,/3:read and write)File_table;/申明函数void login(void);void init(void);名师资料总结-精品资料欢迎下
3、载-名师精心整理-第 1 页,共 19 页 -int analyse(char*);void save_inode(int);int get_blknum(void);void read_blk(int);void write_blk(int);void release_blk(int);void pathset();void del(int);/用户命令处理函数void help(void);void cd(void);void dir(void);void mkdir(void);void creat(void);void open(void);void read(void);void w
4、rite(void);void close(void);void delet(void);void logout(void);void command(void);void quit();/main.cpp 文件/#include head.h/定义全局变量char choice;int argc;/用户命令的参数个数char*argv5;/用户命令的参数int inum_cur;/当前目录char temp2*BLKSIZE;/缓冲区User user;/当前的用户char bitmapBLKNUM;/位图数组Inode inode_arrayINODENUM;/i 节点数组File_tab
5、le file_arrayFILENUM;/打开文件表数组char image_name10=data.dat;/文件系统名称FILE*fp;/打开文件指针/创建映像hd,并将所有用户和文件清除void format(void)int i;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 19 页 -Inode inode;printf(Will be to format filesystem.n);printf(WARNING:ALL DATA ON THIS FILESYSTEM WILL BE LOST!n);printf(Proceed with Format(Y/N)?)
6、;scanf(%c,&choice);getchar();if(choice=y)|(choice=Y)if(fp=fopen(image_name,w+b)=NULL)printf(Cant create file%sn,image_name);exit(-1);for(i=0;i BLKSIZE;i+)fputc(0,fp);inode.inum=0;strcpy(inode.file_name,/);inode.type=d;strcpy(inode.user_name,/);inode.iparent=0;inode.length=0;inode.address0=-1;inode.a
7、ddress1=-1;fwrite(&inode,sizeof(Inode),1,fp);inode.inum=-1;for(i=0;i 31;i+)fwrite(&inode,sizeof(Inode),1,fp);for(i=0;i BLKNUM*BLKSIZE;i+)fputc(0,fp);fclose(fp);/打开文件user.txt if(fp=fopen(user.txt,w+)=NULL)printf(Cant create file%sn,user.txt);exit(-1);fclose(fp);printf(Filesystem created successful.Pl
8、ease first login!n);return;/功能:用户登陆,如果是新用户则创建用户void login(void)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 19 页 -char*p;int flag;char user_name10;char password10;char file_name10=user.txt;do printf(login:);gets(user_name);printf(password:);p=password;while(*p=getch()if(*p=0 x0d)*p=0;/将输入的回车键转换成空格break;printf(*);
9、/将输入的密码以*号显示p+;flag=0;if(fp=fopen(file_name,r+)=NULL)printf(nCant open file%s.n,file_name);printf(This filesystem not exist,it will be create!n);format();login();while(!feof(fp)fread(&user,sizeof(User),1,fp);/已经存在的用户,且密码正确if(!strcmp(user.user_name,user_name)&!strcmp(user.password,password)fclose(fp)
10、;printf(n);return;/已经存在的用户,但密码错误else if(!strcmp(user.user_name,user_name)printf(nThis user is exist,but password is incorrect.n);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 19 页 -flag=1;fclose(fp);break;if(flag=0)break;while(flag);/创建新用户if(flag=0)printf(nDo you want to creat a new user?(y/n):);scanf(%c,&choice);
11、gets(temp);if(choice=y)|(choice=Y)strcpy(user.user_name,user_name);strcpy(user.password,password);fwrite(&user,sizeof(User),1,fp);fclose(fp);return;if(choice=n)|(choice=N)login();/功能:将所有 i 节点读入内存void init(void)int i;if(fp=fopen(image_name,r+b)=NULL)printf(Cant open file%s.n,image_name);exit(-1);/读入位
12、图for(i=0;i BLKNUM;i+)bitmapi=fgetc(fp);/显示位图/读入 i 节点信息for(i=0;i INODENUM;i+)fread(&inode_arrayi,sizeof(Inode),1,fp);/显示 i 节点/当前目录为根目录inum_cur=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 19 页 -/初始化打开文件表for(i=0;i FILENUM;i+)file_arrayi.inum=-1;/功能:分析用户命令,将分析结果填充argc 和 argv/结果:0-13 为系统命令,14 为命令错误int analyse(char*
13、str)int i;char temp20;char*ptr_char;char*syscmd=help,cd,dir,mkdir,create,open,read,write,close,delet,logout,clear,format,quit;argc=0;for(i=0,ptr_char=str;*ptr_char!=0;ptr_char+)if(*ptr_char!=)while(*ptr_char!=&(*ptr_char!=0)tempi+=*ptr_char+;argvargc=(char*)malloc(i+1);strncpy(argvargc,temp,i);argva
14、rgci=0;argc+;i=0;if(*ptr_char=0)break;if(argc!=0)for(i=0;(i 14)&strcmp(argv0,syscmdi);i+);return i;else return 14;/功能:将 num 号 i 节点保存到hd.dat void save_inode(int num)if(fp=fopen(image_name,r+b)=NULL)printf(Cant open file%sn,image_name);exit(-1);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 19 页 -fseek(fp,BLKNUM+num*
15、sizeof(Inode),SEEK_SET);fwrite(&inode_arraynum,sizeof(Inode),1,fp);fclose(fp);/功能:申请一个数据块int get_blknum(void)int i;for(i=0;i 512)add1=inode_arraynum.address1;if(fp=fopen(image_name,r+b)=NULL)printf(Cant open file%s.n,image_name);exit(-1);fseek(fp,BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE,SEEK_SET);ch=
16、fgetc(fp);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 19 页 -for(i=0;(i len)&(ch!=0)&(i=512)fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE,SEEK_SET);ch=fgetc(fp);for(;(i len)&(ch!=0);i+)tempi=ch;ch=fgetc(fp);tempi=0;fclose(fp);/功能:将 temp 的内容输入hd 的数据区void write_blk(int num)int i,len;int add0,add1;add0=inode_arra
17、ynum.address0;len=inode_arraynum.length;if(fp=fopen(image_name,r+b)=NULL)printf(Cant open file%s.n,image_name);exit(-1);fseek(fp,BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE,SEEK_SET);for(i=0;(ilen)&(tempi!=0)&(i 512);i+)fputc(tempi,fp);if(i=512)add1=inode_arraynum.address1;fseek(fp,BLKSIZE+INODESIZE*INO
18、DENUM+add1*BLKSIZE,SEEK_SET);for(;(i len)&(tempi!=0);i+)fputc(tempi,fp);fputc(0,fp);fclose(fp);/功能:释放文件块号为num 的文件占用的空间名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 19 页 -void release_blk(int num)FILE*fp;if(fp=fopen(image_name,r+b)=NULL)printf(Cant open file%sn,image_name);exit(-1);bitmapnum=0;fseek(fp,num,SEEK_SET
19、);fputc(0,fp);fclose(fp);/功能:显示帮助命令void help(void)printf(command:n help-show help menu n clear-clear the screen n cd-change directory n mkdir-make directory n create-create a new file n open-open a exist file n read-read a file n write-write something to a file n close-close a file n delet-delete a
20、exist file or directory n format-format a exist filesystem n logout-exit user n quit-exit this systemn);/设置文件路径void pathset()char path50;int m,n;if(inode_arrayinum_cur.inum=0)strcpy(path,user.user_name);else strcpy(path,user.user_name);m=0;n=inum_cur;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 19 页 -while(m!=inu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验文件管理C+代码 2022 操作系统 实验 文件 管理 C+ 代码
限制150内