nachosLab5实习报告_第1页
nachosLab5实习报告_第2页
nachosLab5实习报告_第3页
nachosLab5实习报告_第4页
nachosLab5实习报告_第5页
免费预览已结束,剩余51页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文件系统实习报告衮一:总体概述3汆二:任务完成忖况3任务完成列表(Y/N) 3具体Exercise的 龛 成精 况3衮三:遇到的困唯以及解决方法39衮四:收我及感想41衮五:对课程的意见和灾议41汆六:参考丈故429家一:总体概述本次实习的主要家是在nachos文件余统的基砒上我行粕关的优化。目看, nachos的文件系统不后完手,比如说文件属性的缺失,文件长度的限制,目荥 结构的缺失(只有根目录)以及同步互斥机制的缺失。第一部分,我们关心文件 余统基础功能,我们需要了斛nachos的文件条统并实现文件属性的完善,文件 长度的力隹,多级日荥以及文件长度的劫杰明整。第二部分,我们关心文件访问 的

2、同步互斥,我们需要了斛nachos承盘工作原理并实现文件余统的同步互斥访 问机制。Challenge部分,我们关7、文件余统的优化,我们需要实现文件位置的 合理分布,cache机制 以及pipe机制。求二:任务完成恬见任务完成列表(Y/N)ExerciselExercise2Exercise3Exercise4Exercise5ExercisedExercise7YYYYYYYChallenge!Challenge2YY具体Exercise的完成情况一、文件东统的基本然作Exercise 1源代玛网兴阅读Nachos源代码中与文件余统相关的代码,理斛Nachos文件系统的工作原理。code/f

3、iIesy$/fiIesys.h 和 code/file$ys/filesys.cccode/filesys/filehdr.h 和 code/filesys/filehdr.cccode/fiIesys/directory.h 衣 code/filesys/directory.cccode/filesys/openfile.h 科 code /filesys/openfile.cccode/userprog/b什map.h 和 code/userprog/bitmap.cccode/filesys/filesys.h 科 code/filejys/filesys.cc 定义文件系统 File

4、SystemNachos实现了两套文件条统,它们对外接o是完金一致的。一套是FILESYSJTUB,建立在UNIX文件系统之上,不使用Nachos的模拟承盘,它主要用于先行实现其他依赖于文件余统的功能,另一套是Nachos的文件条统,实现在Nachos的虚拟磁盘之上#define FreeMapSector0 管谡存左间枚图文件文件头扇区#define DirectorySector1 抿目录文件文件头扇区#define FreeMapFileSize(NumSectors/ BitsInByte)管理存,空间佳图文件大小 #define NumDirEntries 10 根日录录多包含10个

5、目录项#define DirectoryFileSize(sizeof(DirectoryEntry) NumDirEntries) 根日录文件大小主要丈景包括OpenFileyf freeMapFile;管理存空间枚图文件根目录文件OpenFileyf directoryFile;(nachos运行过程保椅打开状态)主要法叔包括FileSystem(bool format) 构爱函数基本功能是立立文件未统,如枭format标志设置,那么立立新的文件条统,基 本流程是生成位图文件利根目录文件文件头,分配位图文件"根目录文件空间, 白窿盘写八位图文件科根目录文件文件头,打开住图文件/根

6、目录文件,向磁.盘 写入位图文件/根目录文件。否对使用原来的文件余统,基本流程是打开伐图文 件狗根目录文件bool Create (char *name, int initialSize) J 建文件基本功能是创立文件,基本流程是生成文件头,分配文件,空间,修正位图文件" 根目录文件。返回值标注是否创建成功,如果存在同名文件/文件头空间不足/文 件空间不足/目录参量不足,那么创立失败OpenFile *Open(char 六name)打开文件基本功能是打开文件,基本流程是返回打开文件数据结构,如果不存在相关文件, 那么返回NULLbool Remove(char *name) 删除文

7、件基本功能是删除文件,基本流程是删除丈件相关参,删除文件头相关衮,修正位 图文件科根目录文件,如枭不存在粕关文件,那么返回falsevoid ListO 输出文件余统文件void Print() 输出文件系统信息主委全M包括#define NumDirect (SectorSize - 2 女 sizeof(int) / sizeof(int)成接索引效量(<=(128-2*4)/4=30)#define MaxFileSize (NumDirect - SectorSize)最大文件大小f<=30*128=3840J立安支M包括int numBytes;文件字节效int numS

8、ectors;文件扇区教int dataSector$NumDirect; 文件家扇区主妾弟戴包括bool Allocate(BitMap 火freeMap, int fileSize)主要功能是初始化文件头,分配文件空间void Deallocate(BitMap *bitMap)主要功能是回收文件空间void FetchFrom(int sectorNumber)主要功能是从窿盘获得文件头,输入是扇区号void WriteBack(int sectorNumber)主要功能是曲窿盘写回文件头,输入是扇区号int ByteToSector(int offset)主要功能是根据偏移获得磁.盘南

9、区int FileLengthQ 主要功能是获得文件长度void PrintQ 主要功能是输出文件相关信息(文件头,文件表Jcode/filesys/directory.h 和 code/filesys/directoryxc 定义目录文件 Directory主妾全支包括#define FileNameMaxLen 9 文件名最大长度主妾变量包括目录项class DirectoryEntry public:bool inUse;目录项是否使用int sector;文件头扇区char nameFileNameMaxLen + 1; 文件名;int tableSize;目录项效量Directory

10、Entry 气able; 目录项主要电效包括Directory(int size) 构爱国教主要功能是立立指定大小的目录-Directory() 析构的教主要功能是释放相关空间 void FetchFrom(OpenFile "file)9主要功能是关闭文件void WriteBack(OpenFile "file)主要功能是白窿盘写回目录文件,粉入是打开文件int Find(char 女name)主要功能是寻找特定文件bool Add (char *name, int newSector)主要功能是增加目录项bool Remove(char yfname)主要功能是删除目

11、录项void ListO主要功能是输出目录文件目录项void Print()主要功能是输出目录文件详细信息code/filesys/openfile.h 衣 code/filesys/openfilexc 定义打开文件 OpenFile主要变M包括FileHeader *hdr;文件头int seekPosition;读/写 卷 置主要法截包括OpenFile(int sector)构受函数主要功能是打开文件(指定文件头扇区) -OpenFileQ 析构函数 void Seek(int position)主要功能是设置读/写住北int Read (char 巧nto, int num Byte

12、s)主要功能是从文件读/写位费读取特定长度的数据列特定伍.黑,返回值是实际族 出的字节数,基于ReadAt用数实现int Write(char *from. int num Bytes)主要功能是从特定核置合文件读/写核置写入特定长度的数据,返回鱼是实际写人的字节数,基于WriteAt函数实现int ReadAt(char *into. int numBytes, int position)主要功能是从文件特定位置读取特定长度的数据到特定位置,返回值是实际读出 的字节数,主要流程是松查请求(numBytes>0, positionv文件长度),确定起 始位置(如枭结束位差超过文件长度,那

13、么取文件长度),从磷盘取出需要的扇 区,揍出需要的家int X/riteAt(char *from, int numBytes, int position)主要功能是从文件符定位置读取特定长度的数据到特定位置,返回值是实际读出 的字节数,主要流程是检杳请求(numBytes>0, positionv文件长度),确定起 始位置(如果结束位置超过文件长度,那么取文件长度),从磁盘取出需要的扇 区,写人需要的家,曲磁.盘写入粕关的扇区int Length()主要功能是返回文件长度9code/userprog/bitmap.hcode/userprog/bitmap.cc 定义校 图模块 B什M

14、ap主要常量包括#define B什slnByte 8/1 byte = 8 Nt#define B什slnWord32/I word = 32 bit主妾丈量包括int numBits; 侬图大小(bit为单核)int numWords;住图大小(word为单位,白上取整)unsigned int 女map; 住 图主要法戴包括BitMap(int nitems) 构爱函教主要功能是立立位图(指定bit)-BitMapO /析构函数主要功能是释放伍图void Mark(int which)主要功能是标注特定的核void Clear(int which)主要功能是清除特定的位bool Test

15、(int which)主要功能是测试符定的核是否标注int Find()主要功能是寻找没有标注的核(寻找失败,返回-1) int NumClearQ9主要功能是输出位图没有标注的位的数量void Print()主要功能是输出位图家void FetchFrom(OpenFile *file)主要功能是从文件揍取位图(基于ReadAt乱救实现)void WriteBack(OpenFile 女file)主要功能是向文件写入位图(基于WriteAt困数实现JExercise 2步侵文件属性增加文件措或信息,如“类型”、“创建时间”.“上次访问时间”、“上次修 改时间”、“路役”等等。受试突破文件名长

16、度的限制。基本恩路:修改文件头,增加粕关信息文件类理这里假设文件类型是文件名中.后面的部分修改filesys/filehdr.h,定义粕关变量char type4;文件类型(为了方便,设% public变量)同时,我们需要修改直接索引数量#define NumDirect (SectorSize - 2 * sizeof(int) - 4) / sizeof(int) 修改filesys/filehdr.cc的Print函数,输出粕关信息9创建文件时需要根据文件名获得文件类型,我们修改filesys/filesys.cc的函教Createint dot_posttton = 0;for(int

17、 i = 。; i < strlen(nane); t+) tf(nanet = 1) dot_positton = t; break;)int j = 0;for(int i = diot_position + 1; i < strlen(nane) - t十十) hdr->typej= namet;j+:)hdr->typej = *0 *;创Jt时间,上次访问时间,上次修衣时河:使用time.h提供的相关实现获得系统时间qinhanminubuntu:-$ cat test.c#include<time.h>#include<stdio.h>

18、;#include<string.h>int nain()(time_t timep;time (&timep);printf(n%sn,asctime(gmtine(&timep);printf ('dXn'1 ,strlen(asctime(gmtime(&timep); return 0;)qinhanminubuntu:-$ /testTue May 3 12:12:49 201625条统时间记录方式是长度25的字符串1 最后的字符是n)修改filesys/filehdr.h,定义粕关变量打粕关函数增加变量char create_ti

19、me25;创建时间上次访问时间上次修改时间char last_visit_time25;char last_modified_time25;增加函教void $et_create_time();根掘条统时间设置创建时间void $etjast_vi$it_time();根据条统时间设置,上次访问时间void $etjast_modified_time(); 根据%统时间设.北上次修改时间同时,我们需要记录文件头所在扇区int $ector_position;(为了 方便,设为 public 变量)并修改直接索引数量#define NumDirect (SectorSize - 3 * size

20、of(int) - 79) / sizeof(int)修改filesys/filehdr.cc,实现相关房教voidFileHeader:set_create_time()timep;time (&timep);strncpy(create_time, asctine(gmtime(&timep), 25);ceate_time24 = " eprintf("create file %snH, create_time);) 一voidFileHeader:set_last_vistt_ttme()time-t timep;time (&timep);

21、strncpy(last_visit_time, asctime(gmt-tme(&timep), 25);last_visit_time24 = ,0"printf("visit file %snH, last_vtsit_time);)voidFileHeader :set_last_modifted_ttme()ttme_t ttmep;time (&timep);strncpy(last_modified_t-tme, asctime(gmtime(&t-tmep), 25);last_modified-time24 = ,0,;printf

22、(Hmodtfy file %snM, last-modified-time);) 一 一同时,我们需要输出相关信息(Print的教)prtntf(',nn);prtntf("sector_positlon : %dnN, sector_position);prtntf(Mtype : %snu, type);prtntf(,fGreatestine : %sn,r, create_tine);prtntf(las-t_vistt_time : %snn, last_vistt_time);prtntf(last-modifted-time : %sn,r, last-nod

23、ified_time);创建文件时需要修改创建.时间,上次访问时间,上次修改时间,我们修改filesys/filesys.cc 的函数 Createhdr- >set_create_ttme();hd- Asut_Idst_Visijttn");hdr- >set_last_rnodified_ttme();hdr->sectproposition = sector;/ everthtng worked, flush all changes back to diskhdr->WriteBack(sector);directory->WriteBack(d

24、irectoryFile);freeMap->WriteBack(freeMapFile);读文件时需要修改上次访问时间,写文件是需要修改上次访问时间"上次修改时间,我们修改 filesys/openfile.cc 的击数 ReadAt 和 WriteAtReadAt所数增加部分hdr- > setjast_visit_time();hdr«>X/riteBack(hdr->sector_position);WMteAt的救增加部分hdr- > set_last_visit_tinne();hd r- > setJa stmodified

25、ti me 0;hdr->WnteBack(hdr->sector_position);同时,我们需要在构查函数记录文件头扇区hdr- > sector_position = sector;文件珞桎:Exercise4 实现谢试结票:首完,执行命令./nachos -cp filel filel.sh 创建文件 filel.shFileHeader contents. File size: 11> File blocks: 6 sector_posttton : 5 type : sh create_ttme : Wed May 4 08:32:28 2016 last

26、-vtstt-tine : Wed May 4 08:32:28 2016 last_modtfied_ttme : Wed May 4 08:32:28 2016可以发现,通过文件创建,过程,文件类型,创建时间,上次访问时间,上次修改时间符合实际然后,执行命令./nachos-p filel.sh访问文件filel.shName: filel.sh, Sector: 5 FtleHeader contents. File size: 11. File blocks: 6 sector_position : 5 type : sh create_ttme : Wed May 4 08:32:2

27、8 2016 last-visit-time : Wed May 4 08:40:29 2016 last_nodtfted_ttme : Wed May 4 08:32:28 2016可以发现,通过文件读过程,文件上次访问时间存合实际最后,执行命令./nachos-r filel.sh删除文件filel.sh,考察根日录文件Directory file header: FtleHeader contents. File size: 200. File blocks: 3 4 sector_positioh : 1 type : create_ttme : last_visit_tine :

28、Wed May 4 08;42:53 2016 last_nodified_time : Wed May 4 08:42:53 2016可以发现,通过文件写过程,文件上次访问时间,上次修改时间符合实际护展文件名长度code/fiIesys/directory.h 和 code/fiIesy$/directory.cc 定义 目 录 文件 Directory,主 要米量包括#define FileNameMaxLen 9文件名最大长度 如果我们希望广展文件名长度,可以考虑修改FileNameMaxLenDirectory contents:Name: 12345678.9, Sector: 5F

29、tleHeader contents. File size: 11 File blocks:6sector-posltion : 5type : 9create_time : Wed May 4 08:53:15 2016last_vtstt_ttne : Wed May 4 08:53:15 2016last_rnodtfied_ttme : Wed May 4 08:53:15 2016可以发现,我们突破了文件名长度的F艮制进一步实现:假设已经实现文件长度的矛展,修改文件filesys.cc建立特定文件存储文件名#define NameSector2FileHeader nameHdr =

30、 new FileHeader;freeMap- > Ma rk(NameSector);ASSERT(nameHdr->Allocate(freeMap, 0);nameHdr->Wr 什 eBack(NameSector);修改文件directory的目录项,通过文件名核置和文件名长度被定文件名int name_po$ition; 文件名 位匿int namejength; 文件名 长度修改文件directory.cc的Add用数,将文件名写入文件名文件,修改文件 directory.cc的Findindex函数,从文件名 文件获得文件名name_file->X/r

31、iteAt(name,jength, _po$ition);name_file->ReadAt(.,jength, _po$ition);测试结果向上Exercise 3步枚文件长度改直接索引才间接索引,以突破文件长度不能超过4KB的限制。基本R路:当南,nachos文件头敢多包含直接索引30项,最大文件大小30*128 = 3840我选择将最后一项直接索引改为间接索引,因为磁.盘扇区的最多包含克接索引32项,所以最大文件大小30*128+1*32叫28 = 7808(128-2*4)/4#defin

32、e NumDirect 30/12 8/4#define Sectorlnt 32/provide 1 indirect index29叫28+1*32*128#define MaxFileSize 7808修改filesys/filehdr.cc中的Allocate法数,这个函数的主要功能是初始化文件头,分配文件空间,我们需要修改分配文件空问的部分,如果需要使用间接索引,那 么初始化间接索引,写入磁.盘相应位置if (nunSectors <= 29) for (tnt t = o; t < numsectors; 1+) dataSectorsi = freeMap->F

33、ind();) else for (int i = 0; i < 29; i十十)dataSectorsi = freeMap->Find();dataSectors29 = freeMap->Find();tnt indirect_index32;for (tnt i = 0; i < nunSectors - 29; i十十)tndtrect_tndexi = freeMap->Ftnd();synchDisk->WriteSector(dataSectors29, (char *)indirect_index); 一修改filesys/filehdr.

34、cc中的Deallocate函数,这个函数的主要功能是回收文件交 同,如果需要使用间接索引,邛会首先根据间接索引待放相关空间,然后根据直 接索引释放粕关空间if (nunSectors <= 29) for (tnt i = 0; i < nunSectors; i+) freeMap->Clear(int) dataSectorst); ) else char *indirect_index = new charSectorSize; synchDisk->ReadSector(dataSectors29, indirect_index);for (tnt i = 0

35、; i < nunSectors - 29; i+) freeMap->Clear(tnt) indirect-indexfi * 4);for (tnt t = o; t < 30; t+) (freeMap->Clear(tnt) dataSectorsfl); )修改filesys/filehdr中的ByteToSector函数,这个所数的功能是根据偏移获得设 盘扇区,如果需要使用间接索引,那么需要根据间接索引的家获得结枭if (offset < 3712) return dataSectorsoffset / SectorSize;)else tnt se

36、ctor_position = (offset - 3712) / 128;char *indirect_index = new charSectorSize;synchDisk->ReadSector(dataSectors29, indirect_index);return tnt(Indirect-indexsector_posttion * 4);修改filesys/filehdr中的Print 的效,这个所数的功能是输出文件粕关信息(文件 头,文件家),输出文件头和文件衮时需要考虑间接索引文件头部分if (nunSectors <= 29) for (i = 0; i &

37、lt; numSectors; i+) printf(M94d ”, dataSectorsi);)else (prtntf(wtndtrect_lndex : %dnM, dataSectors29);for (t = o; t < 29; 1+)prtntf(H%d dataSectorst);char *indtrect_index = new charSectorSize;synchDisk->ReadSector(dataSectors29, indirect_index);j = 0;for (i = 0; i < nunSectors - 29; i+) pri

38、ntf(,%d ” , int(indirect_index j);j 二 j + 4;prtntf(MnM);文件家部分printf(,nn);printf(MFile contents:nn);if (nunSectors <= 29) for (t = k = o; t < numsectors; 1+) synchDisk->ReadSector(dataSectorsi, data);for (j = 0; (j < Sectorsize) && (k < numBytes); j+, k+) if ('040, <= da

39、taj && dataj <= ,176)printf(M%cM, dataj);elseprintf(lt%x, (unsigned char)dataj);)printf(n'();)9else (for (i = k = 0; i < 29; i+) prtntf('Sector : %dn", datasectorst);synchDisk->ReadSector(dataSectorsi, data);for (j = 0; (j < SectorSize) && (k < numBytes);

40、ji, k+) tf (*040* <= dataJ && dataJ <=printf(H%cn, dataj);elseprintf(n%xH» (unsigned char)dataj);printfCXn11);)char *indirect index = new charSectorSize;synchDisk->ReadSector(dataSectors29, indirect_index);for (i = 0; i < numSectors - 29; i十十)(prtntf('Sector : %dnM, tnt(

41、tndtrect_tndext * 4);synchDisk->ReadSector(int(indirect_indexi *4), data);for (j = 0; (j < SectorSize) && (k < numBytes); , k+) tf ('043' v- dataj && dataj <- 11761)printf("c'1, dataj);elseplntf(unsigned char)dataj);)printf Cn");浏忒年杲:首先,立立文件file3,大小5

42、400-rw-rw-r- 1 qinhanmin qinhanmin 5400 May 4 19:54 file3然后,执行命令./nachos-cp file3 file3,创建文件file3位图文件和极目录:Btt map ftle header:FileHeader contents. File size: 128. File blocks:2File contents:ffffffffffff3000O0O0O0000O0900e00O0O0000000 OOOOOOOOOOOOGOOOOOOOOOO0OOOGOGOOOOOOOOOO O000090O0O0O0O0O0O000090O

43、0O0O0O0O0000O0O oeGeeee0eoeDirectory file header:FileHeader contents. File size: 200. File blocks:.3 4File contents:l0005O0Onie30O0O000O0O0O0O0OO0O0O0O0O0O0O e0eee0eeeeee0eo09eo0oeeeeeeee0eoeoeoeo6e 0O0OOOOOOOOOOOO0O0OOO0OOOO0OOOOO0O0OOOOO 0O000O0O0O000000000000OeO00000000O000O0O 0O0OOOOOOOOOOOOGOOO

44、OOOOOOOOQOOOO0O0OGOBitmap set:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 ,23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42 ,43, 44, 45, 46, 47, 48, 49,当着文件文件头:Directory contents:Name: ftle3. Sector: 5FileHeader contents. Ftle size:

45、5400. File blocks:indirect_index : 356 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 3334 36 37 38 39 40 41 42 43 44 45 46 47 48 49当甫文件文件安(邛分):Sector : 43stuvwxyzaabcdefghijklnnopqrstuvwxyzaabcdefghijklFinopqrstuvwxy2aabcdefghtjklmn opqrstuvwxyzaabcdefghijklnnopqrstuvwxy

46、zaabcdefghijksector : 44lmnopqrstuvwxyzaabcdefghijklmnopqrstuvwxyzaabcdefghijklnnopqrstuvwxyzaabcdefg hljklmnopqrstuvwxyzaabcdefghtjklmnopqrstuvwxy2aabcdSector : 45efghtjklmnopqrstuvwxyzaabcdefghljklnnopqrstuvwxyzadbcdefghtJklnnopqrstuvwxyza abcdefghijklmnopqrstuvwxyzaabcdefghijklnnopqrstuvwxSector

47、; 46yzaabcdefghtjklmnopqrstuvwxyzaabcdefghtjklmnopqrstuvwxyzaabcdefghtjklmnopqrst uvwxyzaabcdefghijklninopqrstuvwxyzaabcdefghijklmnopqsector : 47rstuvwxyzaabcdefghijklnnopqrstuvwxyzaabcdefghijklnnopqrstuvwxyzaabcdefghijklF nopqrstuvwxy2aabcdefghtjklnnopqrstuk/wxyzaabcdefghtjSector : 48klmnopqr5tuvwx

48、yzddbcdefghijklnnopqrstuvwxyzaabcdefghijklmnopqrstuvwxyzaabcdef ghijklmnopqrstuvwxyzaabcdefghijklmnopqrstuvwxyzaabcSector : 49defghtjklmnopqrstuvwxyza文件大小5400,需要43个扇区,根据我们的假设,直接索引引导29个扇区, 刷下的14个扇区需要间接索引引导,所以文件占据的扇区是 直接索引引导扇区6,7,834 (29个)间接索引25 间接索引引导扇区36,37,38,,49 (14个)结果好合实际 最后,执行命令./nachos-rfile3,

49、删除文件file3Bit nap file header: FlleHeader contents. File size: 128. File blocks: 2File contents: lfOO0OOO0O0OOOOO0OOOO0OOO0OOOOO0OOOOOO0O O0O000O90O0O0O0O0O00000O90O0O0OeO0O00000 OOO0OOOOOOOOOOGOOOOOOOOOOOOOOO0GO0OOOOOO QQQQQQQQGDirectory file header:FlleHeader contents. File size: 200. File blocks:

50、3 4File contents: O0OO50OGfile3OOOGOOOOOOOOOO0O0OeOOOOO0OOOO O0O0O0OO0O0O0O6O0O00OO9OO0O0O0O0O0O000OO oeoeeee0e9e000eeeeeeee9e0eoeeeoe0eoeG0ee OQOOOOOOOO0OOOOOOO0OOOO0O0O0OOOOO0O0OOOO O0O0000O0OO0e0eO0O0000O0O0OO0000O0O0O0 Bitmap set: 0, 1, 2, 3, 4, Directory contents:可以发现,文件顺利删除,相关空间全部粹放,结枭符合实际Exer

51、cise4实现多级日录基本思路:记录文件路筱,在钊文文件,打开文件,删除文件时进行递.归杳找修改 filesys/directory.h 的 DirectoryEntry,增加 变量inttype; 记录文件类型,0表示文件爽,1技示文件char path20; 记录文件/文件夹路役,使用字符分割 修改filesys/directory.cc,实现相关加教FindDir超教的主要功能是抿据文件/文件交路役获得文件/文件夹所在文件夹,基本流程是根据字符'r分制文件/文件夹路很intDirectory;FindDir(char *name) (int sector = 1;OpenFile

52、 *dir_file = new OpenFile(sector);Directory *dir = new Directory(10);dtr->FetchFron(dtr_ftle);int str_pos = 0;int sub_st_pos = O;char sub_str10;while (str_pos < strlen(name) sub_strsub_str_pos+ = namestr_pos+;if(namestr_pos = 1/1) sub_strsub_str_pos = 10*;sector = dir->Ftnd:(sub_str);dir_fi

53、le = new OpenFile(sector);dir = new Directory(lO);dir->FetchFrom(dir_file);str_pos +;sub_str_pos = 0; ) return sector;)GetType函数主要功能是根据文件名获得文件类型IsEmpty的效的主要功能是判断文件夹是否为,文修改filesys/directory.cc的Add乱数,这个乱数的主要功能是增加目录项,修改后需要根据文件/文件爽路役获得文件名/文件爽名,并且写入新的孱性bool Directoryi :Add.(char tname!, int newSector,

54、 int type> char file_nameFileMameMaxLen + 1;in.t pos = -1;for (in.t i = scrlen(name) - 1; i >= 0; i) if (ziairuei = '/') pos =1+1; break;) i f(pos = 一二)pos =in.t j =二;for (in.t i = pos; i < strlen (naorie) ; i+) file name j 4-+ = name i;f ile_name j = ' 0 1 ;i f (Fin.dln.dex (file_name) != 一二) re turn. FALSE;for (in.t i = !; i < cableSize; ±+) if (!tablei.inUse) tablei.inUse = TRUE;stmapy (tab 1 eI .path, nair.e, 20 );strncpy (vat:le 1 .narnu, file_nair.e/ FileNameMaxLen> ;table x . sector = nev/Seccor;table1.type = type; ret

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论