文档介绍:该【文件实验报告 】是由【青山代下】上传分享,文档一共【9】页,该文档可以免费在线阅读,需要了解更多关于【文件实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。昆明理工大学信息工程与自动化学院学生实验报告(2011—2012学年第二学期)一、实验目的用c或c++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。二、实验原理及基本技术路线图(方框原理图)用c模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。请加上程序功能结构图、流程图、数据结构定义、主要变量的说明、函数的说明等流程图:主要数据结构界面采用vc6mfc环境开发#definemaxfile20//每个用户最多保存20个文件#definemaxuser10//假想文件系统最多支持的人数#defineblocksize32//虚拟磁盘中物理块为每块32字节#definedisksizeblocksize*1000//虚拟磁盘容量为1000*32=32kstructufd//说明文件项的结构数组{节};structmfd{};structheadblock{};structblock//虚拟磁盘的物理块数据结构{bytepstack;//堆栈指针shortpblock[10];//块号pblock[10]是下一个盘块号逻辑地址charusername[10];//主目录用户名boolisexist;//该用户否存在ufdufd[maxfile];//用户文件数组ushortnitem;//ufd个数charfilename[15];chartime[16];//文件建立或修改时间如2003/5/612:00boolisexist;//文件是否存在,删除时标为0boolisshared;//共享标记,共享文件可被其它用户所访问boolattrread;//文件是否可读boolattrwrite;//文件是否可写boolattrexecute;//文件是否可执行htreeitemtreenode;//用于树控件显示的结点句柄ushortfilelen;//文件占用字节数ushortblocknum;//文件占用的物理块数ushortfilelink[100];//文件物理块地址数组,每块32字节,限定一个文件最大100*32=3200字union{};structfat{};//空闲块成组链接法boolopenlist[maxuser][maxfile];//描述文件是否打开的布尔型数组fatfilefat;//描述文件记录项的fat结构cfilefatio;//;//当前登录的用户名intcurrentid;//前前登录的用户标识号blocksuperblock;//超级块,指示第一个空闲块逻辑号ushortmaxopen;//该用户同时可打开的最大文件数ushortusernum;//最户数mfdmfd[maxuser];//最多可支持10个用户byteblock[32];//一块为32字节headblockheadinfo;};说明:本实验采用模拟文件结构的方法,把记录用户帐号,,,其头部是fat结构,用来记录各个用户和文件信息,紧接着是空闲块成组链接法的数据结构,每块32字节,每组10块,共1000块,也就是说,用户文件数据的总容量是32*1000字节,,在登录时程序会提示是否“格式化虚拟磁盘”,接着,程序会显示“用户管理”的窗口,此时应新建几个帐号用于登录做实验。登录后,程序会显示该用户的所有文件,右方的文件列表会显示每个文件的属性信息,和windows的“资源管理器”相似。用鼠标双击列表的每个文件就可以查看文件的内容。单击“新建文件”按钮可以创建一个新的用户文件。选中某个文件后,就可以进行相应的操作,如“修改文件”、“删除文件”或是“打开文件”,删除某个文件时检查该文件的属性,如果是只读的,就是显示警告窗口让用户确认是否一定要删除。硬盘工具可以用图形方式显示“磁盘”块的详细情况,空白块说明该块没有使用,暗红色的说明块已分配,窗口还统计占用的空间大小、用户数等信息。程序用到的结构中图如下图所示:mfd三、所用仪器、材料(设备名称、型号、规格等)。计算机一台四、实验方法、步骤voidcdlguser::onadduser(){updatedata(true);if(>=10){afxmessagebox(用户数量已达到最大10个,你可以删除一些无用的帐号!);return;}for(inti=0;i<10;i++){if([i].isexist==false){wsprintf([i].username,m_username);}}++;writefat();readfat();showuser();//();updatedata(false);}boolreadblock(intid,block*buffer)//读指定块号内容(32字节)到buffer所指向的单元{if(!fatio)returnfalse;//如果虚拟磁盘文件句柄为空,出错返回if(!(sizeof(fat)+(id-1)*blocksize,cfile::begin))returnfalse;//移动文件指针到指定块号if((buffer,blocksize)!=blocksize)returnfalse;//读该块的内容到buffer指定的单元returntrue;}boolwriteblock(intid,block*buffer)//把buffer所指向的单元的内容(32字节)写到指定的物理块中{{intdata[length];}indireone;typedefstruct{indireone*first[length];}indiretwo;typedefstruct{indiretwo*second[length];}indirethree;typedefstructnode{intbegin[beginsize];indireone*one;indiretwo*two;indirethree*three;}mixtab;typedefstructnode{charname[50];inttype;//是文件还是目录intsize;//如果是文件给出大小structnode*next;//兄弟结点structnode*sub;//子节点structnode*father;//父亲节点mixtab*table;}fcb;//文件控制块fcb*root;fcb*present;fcb*finding;charstringname[300];intbitmap[16][16];//位示图intleftbit=0;voidinitall(){inti,j;srand(time(null));for(i=0;i<16;i++){//初始化位示图for(j=0;j<16;j++){bitmap[i][j]=rand()%2;}}root=(fcb*)malloc(sizeof(fcb));strcpy(root->name,\);root->type=0;root->size=0;root->next=null;root->father=root;root->sub=null;for(i=0;i<16;i++){for(j=0;j<16;j++){if(bitmap[i][j]==0){leftbit++;}}}}//判断分配外存时候是不是足够intjudgeenough(intn){if(leftbit>=n)return1;elsereturn0;}//添加时候用voidaddpoint(fcb*f){fcb*temp;if(present->sub==null){present->sub=f;篇三:,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create,open,read等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0至l-1。i/o系统利用内存中的数组模拟磁盘。实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。i/o系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为0至l..1,其中l表示磁盘的存储块数。实验中,总我们可以利用字符数组ldisk[l][b]构建磁盘模型,其中b表示每个存储块的长度。i/o系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。我设计的文件系统拥有三个用户。:磁盘的前k个块是保留区,其中包含如下信息:位图和文件描述符。位图用来描述磁盘块的分配情况。位图中的每一位对应一个逻辑块。创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。前k个块的剩余部分包含一组文件描述符。每个文件描述符包含如下信息:?文件长度,单位字节?文件分配到的磁盘块号数组。该数组的长度是一个系统参数。在实验中我们可以把它设置为一个比较小的数,例如3。:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。目录对应0号文件描述符。初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。每创建一个文件,目录文件的长度便增加一分。目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成:?文件名?:文件系统需提供如下函数;create,destroy,open,read,write。?create(filename):根据指定的文件名创建新文件。?destroy(filename):删除指定文件。?open(filename):打开文件。该函数返回的索引号可用于后续的read,write,lseek,或close操作。?close(index):关闭制定文件。?read(index,mem_area,count):从指定文件顺序读入count个字节mem_area指定的内存位置。读操作从文件的读写指针指示的位置开始。?write(index,mem_area,count):把mem_area指定的内存位置开始的count个字节顺序写入指定文件。写操作从文件的读写指针指示的位置开始。?lseek(index,pos):把文件的读写指针移动到pos指定的位置。pos是一个整数,表示从文件开始位置的偏移量。文件打开时,读写指针自动设置为0。每次读写操作之后,它指向最后被访问的字节的下一个位置。lseek能够在不进行读写操作的情况下改变读写指针能位置。?directory:列表显示所有文件及其长度。:此时显示文件中的文件:文件的删除delete:打开文件(open):文件的写操作(write):读文件(read):关闭文件(close):退出系统(exit):#include<>#include<>#include<>#include<>#definenull0typedefstructmdf{//mdf结构体charusername[20];//用户名charfilename[20];//文件名structmdf*next;}mdf;typedefstructufd{//ufd结构体charfilename[20];//文件名intprotect;//文件保护码unsignedintlength;//文件长度structufd*next;}ufd;篇四:操作系统实验报告文件管理昆明理工大学信息工程与自动化学院学生实验报告(201—201学年第二学期)课程名称:操作系统开课实验室:年月日一、实验目的用c或c++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。二、实验原理及基本技术路线图(方框原理图)用c模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、制、复移动等功能,并对文件有一定的存取权限控制。功能设计:helpdirexitcreate[文件名]cdir[目录名]read[文件名]close[文件名]edit[文件名]cd[目录名]attr[文件名]del[文件名]rename[文件名]显示命令帮助显示当前目录下的文件和文件夹退出系统创建文本文件创建文件夹读取一个文件最多可同时读取五个关闭一个文件编辑一个文件进子目录或者上级目录显示该文件的属性删除文件重命名编辑功能流程图删除文件流程图创建文件流程图核心算法:boolformat(void);//格式化boolinstall(void);//装载虚拟硬盘的数据voidlogin(void);/用户登陆voidshowmenu(void);//显示功能菜单boolonaction(void);//用户选择功能并执行voidcreatefile(stringstr);//创建文件boolread(stringstr);//读取文件voideditfile(stringstr);//编辑文件voiddelete(stringstr);//删除一个文件数据结构:始地址/*inode结构体*/structinode{unsignedshortdi_tag;/*inode标识*//*关联文件数,当为0时表示删除文件,如一个目录至少包含两个文件:.和..*/ount_num=10;//用户数量/*---------常变量------*/constunsignedintblock_size=512;//块长constunsignedintdata_block_num=512;//数据块数量constunsignedintdinode_start=4*block_size;//inode起始位置constunsignedintdinode_size=512;constunsignedintdinode_num=32;//inode大小//inode数量constunsignedintdatastart=(2+dinode_num)*block_size;//数据区的开unsignedshortdi_number;unsignedshortdi_mode;/*存取模式:0为目录,1为文件*/unsignedshortdi_userid;/*当前inode所属用户0为根目录id,一次下去是管理员目录、用户目录*/ess;/*访问权限0为不允许普通用户访问(公共目录),1为允许普通用户访问*/};unsignedshortdi_size;/*文件大小,目录没有大小,值为0*/unsignedshortdi_ctime;/*创建时间*/unsignedshortdi_mtime;/*最后一次修改时间*/unsignedshortdi_block[data_block_num];/*数据块块地址编号*//**超级块***/structsuper_block{};/**账户信息**/structuser{};/**文件/目录结构**/structdirectory{unsignedshorts_inodes_count;/*文件系统中inode的总数*/unsignedshorts_blocks_count;/*数据块总数*/unsignedshorts_r_blocks_count;/*保留块总数*/unsignedshorts_free_blocks_count;//空闲块总数unsignedshorts_free_inodes_count;/*空闲的inode总数*/unsignedshorts_log_block_size;/*block的大小*/unsignedshortuser_id;//ess;//权限stringusername;stringpassword;//用户名//密码篇五:文件管理实验报告文件管理一、实验目的:。。二、实验要求:,每个用户最多保存m个文件。。,出错能显示出原因。,如只读、写、执行等。在每次打开时再次设置保护级别,即可有二级保护。:建文件delete:删文件open:打开文件close:关闭文件read:读文件write:写文件举例:主文件目录mfd=recordusername:string[maxlen];files:array[1..l]ofufd;ofiles:arrau[1..s]ofuodend;用户打开文件目录表:uod=recordfilename:string[maxlen];attrib:attrib;len:integer;status:(open,create);rp,up:integer;end;用户文件目录:ufd=recordfielname:string[maxlen];attrib?ro,rw);len:integer;addr:integer;end;流程图:二、主要数据结构界面采用vc6mfc环境开发#definemaxfile20//每个用户最多保存20个文件#definemaxuser10//假想文件系统最多支持的人数#defineblocksize32//虚拟磁盘中物理块为每块32字节#definedisksizeblocksize*1000//虚拟磁盘容量为1000*32=32kstructufd//说明文件项的结构数组{节charfilename[15];chartime[16];//文件建立或修改时间如2003/5/612:00boolisexist;//文件是否存在,删除时标为0boolisshared;//共享标记,共享文件可被其它用户所访问boolattrread;//文件是否可读boolattrwrite;//文件是否可写boolattrexecute;//文件是否可执行htreeitemtreenode;//用于树控件显示的结点句柄ushortfilelen;//文件占用字节数ushortblocknum;//文件占用的物理块数ushortfilelink[100];//文件物理块地址数组,每块32字节,限定一个文件最大100*32=3200字};structmfd{};structheadblock{};structblock//虚拟磁盘的物理块数据结构{union{};structfat{};//空闲块成组链接法boolopenlist[maxuser][maxfile];//描述文件是否打开的布尔型数组fatfilefat;//描述文件记录项的fat结构cfilefatio;//;//当前登录的用户名intcurrentid;//前前登录的用户标识号blocksuperblock;//超级块,指示第一个空闲块逻辑号ushortmaxopen;//该用户同时可打开的最大文件数ushortusernum;//最户数mfdmfd[maxuser];//最多可支持10个用户byteblock[32];//一块为32字节headblockheadinfo;};bytepstack;//堆栈指针shortpblock[10];//块号pblock[10]是下一个盘块号逻辑地址charusername[10];//主目录用户名boolisexist;//该用户否存在ufdufd[maxfile];//用户文件数组ushortnitem;//ufd个数说明:本实验采用模拟文件结构的方法,把记录用户帐号,,,其头部是fat结构,用来记录各个用户和文件信息,紧接着是空闲块成组链接法的数据结构,每块32字节,每组10块,共1000块,也就是说,用户文件数据的总容量是32*1000字节,,在登录时程序会提示是否“格式化虚拟磁盘”,接着,程序会显示“用户管理”的窗口,此时应新建几个帐号用于登录做实验。登录后,程序会显示该用户的所有文件,右方的文件列表会显示每个文件的属性信息,和windows的“资源管理器”相似。用鼠标双击列表的每个文件就可以查看文件的内容。单击“新建文件”按钮可以创建一个新的用户文件。选中某个文件后,就可以进行相应的操作,如“修改文件”、“删除文件”或是“打开文件”,删除某个文件时检查该文件的属性,如果是只读的,就是显示警告窗口让用户确认是否一定要删除。硬盘工具可以用图形方式显示“磁盘”块的详细情况,空白块说明该块没有使用,暗红色的说明块已分配,窗口还统计占用的空间大小、用户数等信息。