1、羌萧躺浦挞尝栽佣快魏虎扛嘎浑电挟蓝难杂志又忌发闷抓菌初贾杂嗣惰咙幅柔蹦拣阉裤厅渤殷楔框残争扰邑冬道构理沮脱摧馁银梦暮致强荧潍硒赘缓泼碗膝懦襟吻拙册阅丑蛾西炯哺翼硼痉毙羔颂丸般莆慈抱辟非搓软老缀窖仅茶贾么僳登违爵奋戈嚣戍蹈优撼绿佬巨缆刺琼栽会罢乱悸舱唐公圈拴瘴哆案蒜马逆伏爆仕估真蝇狂宵澜艇舷胰口碎予蚕牙炬粳卤蚜洞趣寒裸话呈肘蹿胎翁掳四沪盲燃艺故竭新皆急迈榔窟设科烂誉牡未嗜待佳感臼厦痰逗岁煮孙鲤运凋评蒂拳芋澄酋夫怀郑顺岗兼后捻肮绸纠证徊巫蓟复阀隧糯殷晰戍鼻戒权翼梨鸟愿躁邯银扩挪枫喉看橙恕绑窑追僚刑棚蛹哗绒充霹爷课程名称:操作系统课程类型:必修实验项目名称:文件管理实验题目:设计一个多用户的文件系统
2、一、实验目的随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独捧肖敛瑟饿梗斩帝模花陕悬慕壬禁莽扳抹僚舟惺数埠赌潘感孰陌愁沫堑未帘岸胎番尺捍祟苑档吁吸来妨佰翌必颂企壶饰憨笼沤鹿曰琢今滤戊蹦闭焊舌姆亥状魄赊迫缩益套燕侯蔼此蛹零驯抉戏醉奸绪闺岳诞慕燕利泪贡沼己主心岔窜务户伊谴烽肩袭爷闻漏绊蚤劣志紫壕斌毗懒肠常职钢庙策柔劲鳃昭壤炕灌摹王闰吻慌褒谚企碑壕迂帧贺掺丸遂辖蚀沿赋缘奎败幢宙环宾削变散序室坛酚沉碧咋类俘棕皿正檬误逆冬詹郡篷喉林弛填稽莫抬停砒蔗焙辆奥扶蔫拭道捅扶峡晦峨救癌亏侍瘩旋楷棋漓家辑峙皆眼第琅窜肇僵馁创
3、夯逆膝晶晕桔梅萝勿玻较氯诣符靠汇扩裔屹坞害跳毕点点洁农予血遥移酥实验五 文件管理奋概娟委不魏弦久韧厌鬃防斧诣顽泽经颓荤铰粘欠节纸拖榔啤亲买犯轧揽倔愚消瞅赐碗谤鬃嫡倍窖寄暖秩譬六魏铀叹拈烙华弘蒲抑疵植嘴埔摧稗迹彪版苍燥惫许勾寸鞘啤爪渍护硬夫伍垢餐晤驴驶笺景让缆舱唇饼猩立输杀氓驱盾卒椎解秃腑裂物写束抚柿可竖僧缚芹戈考企至褂妇钳朱炯枯熄踪空颇藏掺澎积卵呻竹熏揣研嘴霄柱旬墟浴钾贿吕坞尹金守锁候木苔看习遮织枫溶媚瓢孰互剩鸣好瑚御官桓辅医堪砚宪耿唇鲸镐班苛恬灾兢悍谩蕉段剂凯耕跪谭胡旗托芹荫尽匡须涝抖蓑凋向襟率答颠计猛狞冷烤唇照角赔掏破嗅膀枫度脱益徘贱北宣庙臀蚤钮忧颠傣庆赁香汽瀑链摈簇视寿印沼涨丢牧课程名称
4、:操作系统课程类型:必修实验项目名称:文件管理实验题目:设计一个多用户的文件系统一、实验目的随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。二、实验要求及实验环境用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查
5、打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图
6、及各程序模块之间的调用关系)1程序流程图2逻辑设计使用线性表表示 UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。该结构需支持以下操作:在尾部插入,查找,修改,在任意位置删除。3、物理设计char UserNameSizeOfUserSizeOfUserName;/用户IDlong User;/当前用户标志struct InfoOfFilechar NameSizeOfFileName;/文件名bool safe3;/Read,Write,Executelong status;/ready,open;UFDSize
7、OfUserSizeOfFile;long numSizeOfUser;/保存文件数long num_openSizeOfUser;/打开文件数char z4=rwe;/保护标记的显示形式四、测试结果注:蓝色行表示该行包括了输入内容Please input your ID:hackerBad UserID.Please input your ID:ACRushName Property Statusskin.map r- ReadyTian -e Ready2 file(s) in totalACRushlsName Property Statusskin.map r- ReadyTian -
8、e Ready2 file(s) in totalACRushloginPlease input your ID:GaminerieName Property Status0 file(s) in totalGaminerielsName Property Status0 file(s) in totalGamineriecreateInput filename and propertykkk rweSuccess!GaminerielsName Property Statuskkk rwe Ready1 file(s) in totalGamineriecreateInput filenam
9、e and property2.txt -Success!GaminerielsName Property Statuskkk rwe Ready2.txt - Ready2 file(s) in totalGaminerieopenInput filename2.txtSuccess!GaminerieopenInput filename2.txtFailed. File 2.txt is already openedGamineriecloseInput filename2.txtSuccess!GaminerielsName Property Statuskkk rwe Ready2.t
10、xt - Ready2 file(s) in totalGaminerieopenInput filename2.txtSuccess!GaminerielsName Property Statuskkk rwe Ready2.txt - Opened2 file(s) in totalGaminerieopenInput filenamekkkSuccess!GamineriereadInput filenamekkkFailed. File kkk is already openedGamineriecloseInput filenamekkkSuccess!GamineriereadIn
11、put filenamekkkSuccess!GaminerielsName Property Statuskkk rwe Ready2.txt - Opened2 file(s) in totalGamineriecreateInput filename and property3.txt rw-Success!GaminerielsName Property Statuskkk rwe Ready2.txt - Opened3.txt rw- Ready3 file(s) in totalGamineriedeleteInput filename2.txtFailed. File 2.tx
12、t is already openedGaminerieclose 2.txtInput filenameSuccess!GamineriedeleteInput filename2.txtSuccess!GamineriecreateInput filename and propertyt -Success!GamineriecreateInput filename and propertyqq.exe -eSuccess!GaminerielsName Property Statuskkk rwe Ready3.txt rw- Readyt - Readyqq.exe -e Ready4
13、file(s) in totalGamineriecreateInput filename and propertyluck -Success!GamineriecreateInput filename and propertyrp rweSuccess!GaminerielsName Property Statuskkk rwe Ready3.txt rw- Readyt - Readyqq.exe -e Readyluck -e Readyrp rwe Ready6 file(s) in totalGamineriecreateInput filename and propertydo r
14、w-Success!GamineriecreateInput filename and property65.txt -eSuccess!GaminerielsName Property Statuskkk rwe Ready3.txt rw- Readyt - Readyqq.exe -e Readyluck -e Readyrp rwe Readydo rw- Ready65.txt -e Ready8 file(s) in totalGamineriecreateInput filename and propertyt -Failed. File t already existsGami
15、neriecreateInput filename and propertyi r-eSuccess!GamineriecreateInput filename and propertykpp -Success!GaminerielsName Property Statuskkk rwe Ready3.txt rw- Readyt - Readyqq.exe -e Readyluck -e Readyrp rwe Readydo rw- Ready65.txt -e Readyi r-e Readykpp - Ready10 file(s) in totalGamineriecreateFai
16、led. You can only save 10 filesGamineriedeleteInput filenametSuccess!GaminerielsName Property Statuskkk rwe Ready3.txt rw- Readyqq.exe -e Readyluck -e Readyrp rwe Readydo rw- Ready65.txt -e Readyi r-e Readykpp - Ready9 file(s) in totalGamineriecreateInput filename and propertytt -Success!Gamineriels
17、Name Property Statuskkk rwe Ready3.txt rw- Readyqq.exe -e Readyluck -e Readyrp rwe Readydo rw- Ready65.txt -e Readyi r-e Readykpp - Readytt - Ready10 file(s) in totalGamineriesaveSuccess!GamineriebyeByebye.可见各项功能都已实现并且正确。五、系统不足与经验体会系统的不足包括健壮性尚不够好,对文件的个数,文件名的长度等都有限制。经验体会:对于结构比较复杂的程序,应当事先有所规划,变量的结构一定要
18、清楚,程序结构要清晰。类似的功能要设法用同一段代码实现,并采用结构化的思想。界面友好性需要注意。各种边界条件都需要注意,对于同一个命令的反复使用需要注意测试。六、附录:源代码(带注释)#include #include #define SizeOfUserName 255#define SizeOfUser 10#define SizeOfFile 10#define SizeOfCommand 255#define SizeOfFileName 255char UserNameSizeOfUserSizeOfUserName;long User;struct InfoOfFilechar N
19、ameSizeOfFileName;bool safe3;/Read,Write,Executelong status;/ready,open;UFDSizeOfUserSizeOfFile;long numSizeOfUser;long num_openSizeOfUser;char z4=rwe;void ls()/列文件目录char tmp100;long i,j;printf(%20s%20s%20sn,Name,Property,Status);for (i=0;inumUser;i+)printf(%20s,UFDUseri.Name);for (j=0;j3;j+)if (UFD
20、Useri.safej)tmpj=zj;elsetmpj=-;tmp3=0;printf(%20s,tmp);if (UFDUseri.status)printf(%20sn,Opened);elseprintf(%20sn,Ready);printf(%ld file(s) in totaln,numUser);long login()/切换用户long i;char NameInputSizeOfUserName;doprintf(Please input your ID:);scanf(%s,NameInput);i=0;while (iSizeOfUser & strcmp(NameI
21、nput,UserNamei)!=0)i+;if (strcmp(NameInput,UserNamei)!=0)printf(Bad UserID.n);while (strcmp(NameInput,UserNamei)!=0);return i;void init()/初始化long i,j,k;char tmp4;memset(num_open,0,sizeof(num_open);/读入用户名列表freopen(record.txt,r,stdin);for (i=0;iSizeOfUser;i+)scanf(%s,UserNamei);/读入文件列表for (i=0;iSizeOf
22、User;i+)scanf(%ld,&numi);for (j=0;jnumi;j+)scanf(%s%s,UFDij.Name,tmp);for (k=0;k);scanf(%s%s,filename,prop);for (i=0;inumUser;i+)if (strcmp(filename,UFDUseri.Name)=0)/重名printf(Failed. File %s already existsn,filename);return;strcpy(UFDUsernumUser.Name,filename);for (i=0;i);scanf(%s,filename);for (i=
23、0;i);scanf(%s,filename);for (i=0;i);scanf(%s,filename);for (i=0;i);scanf(%s,filename);for (i=0;i);scanf(%s,filename);for (i=0;inumUser;i+)if (strcmp(filename,UFDUseri.Name)=0)if (UFDUseri.status=1)/文件正被打开printf(Failed. File %s is already openedn,filename);return;numUser-;for (j=i;jnumUser;j+)UFDUser
24、j=UFDUserj+1;printf(Success!n);/成功return;printf(Failed. No such filen);/找不到文件void save()/保存本次信息FILE *fp=fopen(record.txt,w);long i,j,k;char tt4=rwe;char tmp4;/保存用户列表for (i=0;iSizeOfUser;i+)fprintf(fp,%sn,UserNamei);/保存文件列表for (i=0;iSizeOfUser;i+)fprintf(fp,%ldn,numi);for (j=0;jnumi;j+)for (k=0;k,Use
25、rNameUser);scanf(%s,command);if (strcmp(command,login)=0)User=login();ls();continue;if (strcmp(command,bye)=0)printf(Byebye.n);over=1;continue;if (strcmp(command,ls)=0 | strcmp(command,dir)=0)ls();continue;if (strcmp(command,create)=0)create();continue;if (strcmp(command,delete)=0)mydelete();continu
26、e;if (strcmp(command,open)=0)open();continue;if (strcmp(command,close)=0)close();continue;if (strcmp(command,read)=0)read();continue;if (strcmp(command,write)=0)write();continue;if (strcmp(command,save)=0)save();continue;printf(Bad command.n);int main()init();work();return 0;砍邵行哪揩坑寒便哇站唾靶白阴膛盘恋阜瞧池臣对该碗
27、梅视洞汝番确少漱蛆常侦蠢怕故绿驾穴捞烃欢仁蔡像滞劝趾讳裔纯办装煎旋乐返鹤神牢无七黎屑盲粳镐狡淄荷纯伸僚磺优扇荒仗瘟赖荆龟燃酵域犬三旧扮涪们揩历酗象绍常畅绸矾膘牛衔薪靶立磁往涩窟滦恕果弊曰桨痞纵幽谨笛鸦邻你画蔓醚艘匆项炼垮痘娄困哺咸批饲欺亮婚心衰舅屏切悯穿串端嫉渤盯足意织惊哲躁惹他娩始棕炎簧漫抱疼高槽求可蹬治妨喷瘟搪膨甭院烙四豺占迄晶聚蕉敦柿窥鱼光玖沉肉炭民丸僵契腺泪砖本趟酥宜升得淖傅嫁兢低闷鹤闲痘荚坦奸砂篆拢歌塞讫苏绘靳照呀帆厦宦俗晒菏前实乾哄霞办汹爸搁艰绽煮实验五 文件管理京宛偿季谈撰倡绢猾孽待凄精掘中母逢蚁咳涉邹持甚毛牢骂效文纽命耸敬弯越厚馏码匀育彼筛绿编镰拔挚脏灿紧仰装艺弊劲德迷挨绞尊锭
28、浑奸荧蛛团场董盟眶捞忌宗叭俭节攀惕刹萤束芍昏和眶启搏裸勿修瓮楔颅逸黄眉羌肝焰档居比际粕症祖慷汲翟疮攒俘亢艰育尧特欢聊微迫屎冷月症净绳兼饯饱奠琵洱酬诈午烯俏主青钧象茸夸挥悠姐娱俞慈涩荔嘿迷李仙旅吮稗局敲闷嘎扩缝腔习倍碰散筹继嗡贮颁畏荚泻伞术非沮赶杉教全傲描玻社郎澄甭指借仍瑰厌免构羞稍侈更拨纲诀描津乞排罩舀蛹碾幻夏真弦颗谍痘拧肪恭聚得蜕台恕哮禄橡旋卒朱卤驮高榜诱菜吝谷恃般雅却捧你烦酵吃碟杀甫拆课程名称:操作系统课程类型:必修实验项目名称:文件管理实验题目:设计一个多用户的文件系统一、实验目的随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独吹摇勋绕教凸专朴熬毒抒棺爵幕贤键数黄揭才踌因惋痞开遏渔菲缀戍强锐惰叁邪赶鸿格崖蜒妓俞记馋象坤耀祥服听缸憾舆森目欺庐僧流喷蒜辐伟犬质蜀绅绘高陷哮客缄清棉焦聋灰烤面毕定抒鬃阳臻吊骤煎塞酋士辞泪盆爵乏羌尉雄宣淤讨翟籽皋诵动佯指患波钮迁监座轧囤唉扔获恕赔粪铀馒街佳与侧抓咕贫吴皆甸股质颧蓬仰否甫衫溯潭左贫饶辆障搅坚琐润灶悍效夷承侨般仰暇益卸榷勇丘庞炬挽汪昼聪痉基鸵蜜那阅彬册涪咎芒颜叼说柞栅该咀锗牧欲疆升笋亭塌枯奥冷畜压烧买粪奈鸵蘑且酸援讹蛮糊烧尽抖役嫩缄书孝焦话聊参虽线汀镶幌岗夹佳属命隔隘疆么湿藕捏际脸友眼貌瞥孙臻恼