BBSˮľÇ廪վ¡Ã¾«»ªÇø

·¢ÐÅÈË: raner (lilo), ÐÅÇø: Linux 
±ê  Ìâ: NACHOSÂÛ̳(3) 
·¢ÐÅÕ¾: BBS Ë®Ä¾µ÷ÊÔÕ¾ (Thu Jun  4 16:47:19 1998) 
 
×÷  ¼Ò: solmon (ËùÂÞÃÅÍõ) on board 'Unix' 
Ìâ  Ä¿: NACHOSÂÛ̳(3) 
À´  Ô´:  ¹ÄÀËÌýÌÎÕ¾ 
ÈÕ  ÆÚ: Thu Mar  6 23:04:30 1997 
³ö  ´¦: mysu@JingXian.xmu.edu.cn 
 
          µÚÈýÕ    Îļþϵͳ 
 
 
    NachosÎļþϵͳµÄ½çÃæÀàËÆÓÚUNIX,ÓÐÓëUNIXµÄcreat,open,close,read,write, 
lseekºÍunlinkÏàËÆ(²»ÊÇÍêȫһÑù)µÄϵͳµ÷ÓÃ.Ò»¸öÖØÒªµÄ²»Í¬µãÔÚÓÚNachosÎļþϵ 
ͳÊÇÓÃC++ʵÏÖµÄ.Creat(Ï൱ÓÚUNIXÖеÄcreat),Open(open),ºÍRemove(unlink)¶¼ÊÇ 
¶¨ÒåÔÚFileSystemÀàÖеÄ,ÒòΪËüÃǶ¼ÊÇÓëÕýÔÚ²Ù×÷µÄÎļþÃûºÍĿ¼ÏàÁªÏµµÄ. 
FileSystem::Open·µ»ØÒ»¸öÖ¸Õë,ËüÖ¸ÏòÒ»¸öOpenFile¶ÔÏó,OpenFile¶ÔÏóÓëUNIXÖеĠ
´ò¿ªÎļþÃèÊö·ûÀàËÆ,¿ÉÒÔÓÃÕâ¸ö¶ÔÏóÖ±½Ó¶ÔÎļþ½øÐвÙ×÷,ÈçSeek(lseek), Read 
(read), Write(write)Ö»Òª°ÑÕâ¸öOpenFile¶ÔÏóɾ³ý(delete)¾Í¿ÉÒԹرÕ(close)Õâ¸ö 
ÒÑ´ò¿ªÎļþÁË. 
    NachosÎļþϵͳµÄ½á¹¹Èçͼ: 
 
      ©³©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©· 
      ©§           ÎÄ  ¼þ  Óà »§             ©§ 
      ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
      ©§ FileSystem   OpenFile     Directory  ©§ 
      ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
      ©§             FileHeader               ©§ 
      ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
      ©§              SynchDisk               ©§ 
      ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
      ©§               Disk                   ©§ 
      ©»©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
 
 
    ÔÚNachosÎļþϵͳÖÐ,Ðí¶àÊý¾Ý½á¹¹¼È¿É´æ·ÅÔÚÄÚ´æÀï,ÓÖ¿É´æ·ÅÔÚ´ÅÅÌÀï.ΪÁËÒ» 
ÖÂÆð¼û,ÎļþϵͳÖÐSynchdiskÒÔÉϵÄÀà¶¼ÓÐÒ»¸öFetchFrom³ÉÔ±º¯Êý,Ëü°ÑÊý¾Ý½á¹¹´Ó 
´ÅÅ̶Áµ½ÄÚ´æ;»¹ÓÐÒ»¸öWriteBack³ÉÔ±º¯Êý,ËüÓëFetchFromÏà·´,°ÑÊý¾Ý½á¹¹´ÓÄÚ´æÐ´ 
»Ø´ÅÅÌ.ÔÚÄÚ´æÖеÄÊý¾Ý½á¹¹Óë´ÅÅÌÉϵÄÍêȫһÖÂ,ûÓÐÔö¼õÊý¾ÝÏî,¸ø¹ÜÀí´øÀ´Á˲»ÉÙ 
·½±ã.ÔÚÒÔºóµÄ½éÉÜÖÐÕâÁ½¸öº¯Êý²»ÔÙÖØ¸´ÁË. 
    ÈÃÎÒÃÇ´ÓÏÂÍùÉÏ·ÖÎöÎļþϵͳ.DiskÄ£ÄâÁËÒ»¸öÎïÀí´ÅÅÌ,ËüµÄ¾ßÌåʵÏÖÔÚ»úÆ÷Ä£ 
Äⲿ·ÖÒѾ­½éÉÜÁË. 
 
    SynchDiskÀàÔÚÎïÀí´ÅÅ̵Ļù´¡É϶¨ÒåÁËÒ»¸öͬ²½´ÅÅ̵ijéÏó½çÃæ.Ïó±ðµÄI/OÉ豸 
Ò»Ñù,ÎïÀí´ÅÅÌÊÇÒì²½É豸.Óû§Ìá³ö¶ÁдÇëÇóºóÁ¢¼´·µ»Ø,ÕâÒÔºó»áÓÐÒ»¸öÖжϷ¢Éú, 
±¨¸æ´ÅÅ̲Ù×÷Íê³É.ͬ²½´ÅÅÌÓÐЩ²»Í¬,½ø³ÌÌá³ö¶ÁдÇëÇóºó½«Ë¯Ãߵȴý,ÒÔºóÔÚ´ÅÅÌÖ 
¶ÏµÄ´¦Àíº¯ÊýÖл½ÐÑËü,ËùÒÔ½ø³Ì½«µÈ´ý´ÅÅ̲Ù×÷Íê³Éºó²ÅÄÜ·µ»Ø. 
    SynchDiskÀàµÄ½çÃæÎª: 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥© 
              ©§      SynchDisk       ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§     ReadSector       ©§ 
              ©§     WriteSector      ©§ 
              ©»©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
    SynchDiskÀàµÄÉú³Éº¯ÊýÉú³ÉÁËÒ»¸öËø,Ò»¸öÐźÅÁ¿,Ò»¸öÎïÀí´ÅÅ̶ÔÏó,ÓÉÓÚÎïÀí 
´ÅÅÌÒ»´ÎÖ»ÄܽÓÊÜÒ»¸ö¶ÁдÇëÇó,Ëø¾ÍÊÇÓÃÀ´ÊµÏÖ¶Áд»¥³âµÄ.ÐźÅÁ¿ÓÃÀ´ÊµÏÖÖжϳ̠
ÐòºÍ·¢³ö´ÅÅÌÇëÇóµÄ³ÌÐòÖ®¼äͬ²½¡£ 
    ReadSector³ÉÔ±º¯ÊýµÄÖ´Ðйý³ÌÈçÏÂ: 
          1.¹Ø±ÕËø.(Èç¹û±ðµÄ½ø³ÌÕýÔÚ²Ù×÷´ÅÅÌ,Ôò˯Ãߵȴý±ðµÄ½ø³ÌµÄ´ÅÅ̲Ù×÷Í 
            ³É) 
          2.ÏòÎïÀí´ÅÅÌ·¢¶ÁÊý¾ÝÇëÇó. 
          3.¶ÔÐźÅÁ¿×÷P²Ù×÷(˯Ãߵȴý´ÅÅ̲Ù×÷µÄÍê³É,½«ÓɶÁ´ÅÅ̵ÄÖжϴ¦Àí³ÌÐò 
            »½Ðѱ¾½ø³Ì). 
          4.½âËø. 
    WriteSector³ÉÔ±º¯ÊýµÄÖ´Ðйý³ÌÓëReadSectorÀàËÆ. 
 
    FileHeaderÀàÊÇÓÃÀ´¹ÜÀíÒ»¸öÎļþ¿éÔÚ´ÅÅÌÉÏ·Ö²¼Çé¿öµÄÊý¾Ý½á¹¹.Õâ¸öÊý¾Ý½á¹¹ 
³ÆÎªÎļþ¿ØÖÆ¿é.Îļþ¿ØÖÆ¿éÖл¹¿ÉÒÔ°üÀ¨Ò»Ð©ÓйØÎļþµÄÐÅÏ¢,È糤¶È,ÓµÓÐÕߵȵÈ, 
Îļþ¿ØÖÆ¿éÓëUNIXÖеÄi-nodeÀàËÆ.Îļþ¿ØÖÆ¿é¿ÉÒÔ·ÅÔÚÄÚ´æÖлò´ÅÅÌÀï.µ±ËüÔÚ´ÅÅÌ 
Àïʱ,Ö»Õ¼ÓÃÒ»¸öÉÈÇø,NachosûÓÐʵÏÖÎļþ¿ØÖÆ¿éµÄ¼ä½Ó¶¨Î»,ËùÒÔÎļþ¿ØÖÆ¿éµÄ´óС 
Êǹ̶¨µÄ,Ò²µ¼ÖÂNachosÎļþ×î´ó³¤¶ÈΪ4Kbytes. 
    FileHeaderµÄ½çÃæÎª: 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©· 
              ©§  FileHeader    ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§  Allocate      ©§ 
              ©§  Deallocate    ©§ 
              ©§  ByteToSector  ©§ 
              ©§  FileLength    ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§  numBytes      ©§ 
              ©§  numSectors    ©§ 
              ©§  dataSectors[] ©§ 
              ©»©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
    ÆäÖÐnumBytes ÎªÎļþ³¤¶È,numSectorsΪÎļþÕ¼ÓõÄÉÈÇøÊý,dataSectors[]Êý×é 
Ö¸Ã÷ÎļþµÄÿ¸öÊý¾Ý¿é´æ·ÅÔÚµÚ¼¸¸öÉÈÇøÀï.ÀýÈç,ÓÐÒ»¸öÎļþ³¤¶ÈΪ200 byte,Nachos 
¶¨ÒåÒ»¸öÉÈÇøµÄ³¤¶ÈΪ128 byte,ÔònumBytes=200, numSectors= ceil(200/128)=2,ÎÄ 
¼þÕ¼ÓÃÁËÁ½¸öÉÈÇø,Èç¹ûÎļþµÄµÚÒ»¿é·ÅÔÚµÚ5ÉÈÇø,µÚ¶þ¿é·ÅÔÚµÚ20ÉÈÇø,Ôò 
dataSectors[0]=5,dataSectors[1]=20,dataSectorsÊý×éÆäËûÔªËØÖµ²»¶¨,ҲûÓÐÓÃ. 
    Allocate³ÉÔ±º¯ÊýÓÃÀ´³õʼ»¯Îļþ¿ØÖÆ¿é,Ϊ±¾Îļþ·ÖÅä´ÅÅ̿ռä.ËüµÄÖ´Ðйý³ÌÈç 
ÏÂ: 
          1.¸ù¾ÝÎļþ³¤¶È¶ÔnumBytes,numSectors¸³³õÖµ. 
          2.Èç¹ûÎļþÐèÒªµÄÉÈÇøÊý´óÓÚ´ÅÅÌÉϵĿÕÏÐÉÈÇøÊý,Ôò·µ»ØÊ§°Ü. 
          3.¸øÎļþ·ÖÅä¿ÕÏÐÉÈÇø,°ÑÉÈÇøºÅ·ÅÈëdataSectorsÊý×é,²¢°ÑÕâЩÉÈÇøµÄʹ 
                  ÓñêÖ¾´Ó¿ÕÏиÄΪÒÑÕ¼ÓÃ. 
    Deallocate³ÉÔ±º¯ÊýÊÍ·ÅÎļþÕ¼ÓõÄÉÈÇø. 
    ByteToSector·µ»Ø´æ·Å×ÅÎļþµÚx×Ö½ÚÊý¾ÝµÄÉÈÇøºÅ. 
    FileLength·µ»ØÎļþ³¤¶È. 
    OpenFileÀàÓÃÀ´ÊµÏÖÎļþµÄ¶Áд²Ù×÷.Nachos½«ÎļþµÄ²Ù×÷ת»¯Îª¶ÔÉÈÇøµÄ²Ù×÷. 
ÔÚÏÖÓÐʵÏÖÖв¢Ã»Óп¼ÂÇÎļþϵͳµÄ²¢·¢ÎÊÌâ,ÕâЩÁô¸øÑ§Éú×÷Ϊ¿Î³Ì×÷Òµ.OpenFile 
µÄ½çÃæÎª: 
 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©· 
              ©§    OpenFile    ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§    Seek        ©§ 
              ©§    ReadAt      ©§ 
              ©§    WriteAt     ©§ 
              ©§    Read        ©§ 
              ©§    Write       ©§ 
              ©§    Length      ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§  seekPosition  ©§ 
              ©§ FileHeader* hdr©§ 
              ©»©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
    seekPositionÊÇÎļþµ±Ç°¶ÁдָÕë,hdrÊÇÎļþ¿ØÖÆ¿éµÄµØÖ·.OpenFileµÄÉú³Éº¯Êý 
´øÓÐÒ»¸öintÐ͵IJÎÊý,Ö¸Ã÷´æ·ÅÎļþ¿ØÖÆ¿éµÄÉÈÇøºÅ.Éú³Éº¯ÊýÏȸøhdr·ÖÅä¿Õ¼ä,È»ºó 
´Ó´ÅÅÌÖжÁ³öÕâ¸öÎļþµÄÎļþ¿ØÖÆ¿é,·ÅÈëhdrÖ¸ÏòµÄÄÚ´æ.seekPositon ¸³Îª0,ʹµÃÎÄ 
¼þµ±Ç°¶ÁдָÕëÖ¸ÏòÎļþ¿ªÍ·. 
    Seek³ÉÔ±º¯Êý½«Îļþµ±Ç°¶ÁдָÕëÒÆµ½ÐµÄλÖÃ. 
 
    ReadAt/WriteAtÓÃÓÚ¶ÁдÊý¾Ý.¶ÁдµÄ¿ªÊ¼Î»ÖúͶÁдÊý¾Ý³¤¶ÈÓɲÎÊýÖ¸¶¨.ÓÉÓÚ 
NachosÎļþ³¤¶È²»¿É¸Ä±ä,ËùÒÔ³¬¹ýÎļþ³¤¶ÈµÄ¶Áд¶¼±»ºöÂÔ.ÓÖÒòΪ´ÅÅ̶Áдµ¥Î»ÊÇ 
Õû¸öÉÈÇø,ËùÒÔReadAt¶Á³ö°üÀ¨Òª¶ÁÊý¾ÝµÄËùÓÐÉÈÇø,È»ºóÖ»°ÑÒªÇó¶Á³öµÄÊý¾Ý¿½±´¸ø 
µ÷ÓÃÕß.WriteAtÏȶÁ³öдÈëÊý¾ÝËùÔÚµÄÈ«²¿ÉÈÇø,È»ºó°ÑÐÂÊý¾ÝдÈëÒªÐ޸ĵÄλÖÃ,×î 
ºó½«ÕâЩÉÈÇøÐ´»Ø´ÅÅÌ,ÕâÑù¾Í±£Ö¤Á˲»»á¸²¸Ç²»Ó¦±»Ð޸ĵIJ¿·Ö.ÕâÁ½¸öº¯Êý·µ»ØÊµ 
¼Ê¶Á/дµÄ³¤¶È. 
    Read/Write³ÉÔ±º¯Êý·Ö±ðµ÷ÓÃReadAt/WriteAt³ÉÔ±º¯Êý,´ÓÎļþµ±Ç°¶ÁдָÕë´¦¿ª 
ʼ¶Á/дÊý¾Ý.ËüµÄÖ´Ðйý³ÌÈçÏÂ: 
          1.·Ö±ðµ÷ÓÃReadAt/WriteAtº¯Êý´ÓÎļþµ±Ç°¶ÁдָÕë´¦¿ªÊ¼¶Á/дÊý¾Ý. 
          2.Îļþµ±Ç°¶ÁдָÕëÏòºóÒÆ¶¯Êµ¼Ê¶Á/дµÄ³¤¶È. 
          3.·µ»ØÊµ¼Ê¶Á/дµÄ³¤¶È. 
    Length·µ»ØÎļþ³¤¶È. 
 
    NachosµÄĿ¼ÊÇÓÉÒ»×éĿ¼Ïî×é³É,ÿ¸öĿ¼Ïî´ú±íÒ»¸öÎļþ.Ŀ¼ÏîµÄÄÚÈÝÓÐ:ÒÑ 
ʹÓñêÖ¾inUse,Îļþ¿ØÖÆ¿éËùÔÚÉÈÇøºÅsector,ÎļþÃû×Öname,ÎļþÃûÓÐ×î´ó³¤¶È,ÕâÑù 
ÿ¸öĿ¼Ïî¶¼Óй̶¨³¤¶È.µ±ÎÒÃÇÖªµÀÎļþËùÔÚĿ¼ºÍÎļþÃûºó,¾Í¿ÉÒÔ´ÓËüËùÔÚĿ¼ 
ÖÐÕÒµ½Ãû×ÖÓëÖ®ÏàͬµÄĿ¼Ïî,ÓÚÊǾͿÉÒÔÖªµÀ´ËÎļþµÄÎļþ¿ØÖÆ¿éËùÔÚÉÈÇø,¶øÎļþ 
¿ØÖÆ¿éÖмǼÁËÎļþÄÚÈÝËùÔÚµÄÉÈÇøºÅ,ÕâÑù¾Í¿ÉÒÔ¶ÁдÕâ¸öÎļþÁË.ÓëÎļþϵͳµÄÆä 
ËûÊý¾Ý½á¹¹Ò»Ñù,Ŀ¼½á¹¹¼È¿ÉÒÔ·ÅÔÚÄÚ´æÖÐ,ÓÖ¿ÉÒÔ·ÅÔÚ´ÅÅÌÉÏ.µ±Ëü´æ·ÅÔÚ´ÅÅÌÉÏʱ, 
ÊÇ×÷Ϊһ¸ö³£¹æµÄNachosÎļþ´æ´¢µÄ,ÓÉÓÚNachosÎļþ³¤¶È¹Ì¶¨,ËùÒÔĿ¼µÄĿ¼Ïî¸ö 
ÊýÔÚÉú³ÉĿ¼ʱ¾Í¹Ì¶¨ÁË,ÒÔºó²»Äܸıä.ÏÖÓÐʵÏÖÖÐ,¶ÔĿ¼²Ù×÷µÄ»¥³âÊÇÓɵ÷ÓÃÕß±£ 
Ö¤µÄ. 
    Ä¿Â¼µÄ½çÃæÎª: 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©· 
              ©§   Directory    ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§   Find         ©§ 
              ©§   Add          ©§ 
              ©§   Remove       ©§ 
              ©§   List         ©§ 
              ©§   FindIndex    ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§   tableSize    ©§ 
              ©§   table        ©§ 
              ©»©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
    tableSize·ÅµÄÊÇĿ¼ÏîµÄ¸öÊý,tableÊÇĿ¼ÏîÊý×éµÄµØÖ·. 
    DirectoryÀàµÄÉú³Éº¯ÊýµÄÖ´Ðйý³ÌÈçÏÂ: 
          1.´ËĿ¼µÄĿ¼Ïî¸öÊýÓɲÎÊý´«Èë,ÓÃÕâ¸ö²ÎÊý¸ø 
            tableSize¸³Öµ. 
          2.¸øÄ¿Â¼ÏîÊý×étable·ÖÅä¿Õ¼ä,ËüµÄÔªËØ¸öÊýΪtableSize. 
          3.½«ËùÓÐĿ¼ÏîµÄʹÓñêÖ¾ÇåÁã. 
    Ò»¸öĿ¼Àà¶ÔÏó²ÅÉú³Éʱ,Ŀ¼ÏîÄÚÈÝ×ÜÊǿյÄ,Èç¹ûÕâ¸öĿ¼ÒѾ­´æÔÚ,¾ÍÐèÒªÓà
FetchFrom³ÉÔ±º¯Êý°ÑĿ¼ÏîÄÚÈÝ´Ó´ÅÅÌÉ϶Á³öÀ´. 
    FindIndex(char* name)³ÉÔ±º¯ÊýÔÚĿ¼ÖÐѰÕÒÎļþÃûΪnameµÄÎļþ,Èç¹ûÕÒµ½¾Í 
·µ»Ø´ËÎļþÔÚĿ¼ÏîÊý×éÖеÄË÷Òý,·ñÔò·µ»Ø-1. 
    Fine(char* name)³ÉÔ±º¯ÊýÔÚĿ¼ÖÐѰÕÒÎļþÃûΪnameµÄÎļþ,Èç¹ûÕÒµ½¾Í·µ»Ø´Ë 
ÎļþµÄÎļþ¿ØÖÆ¿éËùÔÚÉÈÇøºÅ,·ñÔò·µ»Ø-1. 
    bool Add( char* name,int newSector) º¯ÊýÔö¼ÓÒ»¸öÎļþµ½Ä¿Â¼ÖÐ,Õâ¸öÎļþµÄ 
Ãû×ÖΪname,Îļþ¿ØÖÆ¿éËùÔÚÉÈÇøºÅΪnewSector.Èç¹ûÌí¼Ó³É¹¦,·µ»ØTRUE.ÔÚÏÂÁÐÇé¿ö 
·µ»ØFALSE: 
          1.Ŀ¼ÖÐÒѾ­´æÔÚÕâ¸öÎļþÃû. 
          2.Ŀ¼ÒÑÂú. 
    bool Remove( char* name ) °ÑÃû×ÖΪnameµÄÎļþ´ÓĿ¼ÖÐɾ³ý.Èç¹û³É¹¦·µ»Ø 
TRUE.ÈôÔÚĿ¼ÖÐûÓÐÕâ¸öÎļþ,Ôòʧ°Ü,·µ»ØFALSE. 
    List() ÏÔʾĿ¼ÖÐËùÓеÄÎļþ. 
    FileSystemÊÇNachosµÄÎļþϵͳµÄ¶¥²ã½çÃæ.ËüÌṩÁËһЩÓÃÎļþÃûÀ´²Ù×÷ÎļþµÄ 
¹¦ÄÜ. 
    FileSystemµÄ½çÃæÎª: 
 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©· 
              ©§  FileSystem    ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§    Creat       ©§ 
              ©§    Open        ©§ 
              ©§    Remove      ©§ 
              ©§    List        ©§ 
              ©Ç©¥©¥©¥©¥©¥©¥©¥©¥©Ï 
              ©§  freeMapfile   ©§ 
              ©§ directoryFile  ©§ 
              ©»©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
 
    ÆäÖÐfreeMapfileºÍdirectoryFileÊÇÁ½¸öOpenFileÀàµÄÖ¸Õë. 
    freeMapfileÖ¸ÏòÓÃÀ´¹ÜÀí´ÅÅ̿ռäµÄBitMapÎļþ.´ÅÅ̵Äÿ¸öÉÈÇø¶ÔÓ¦BitMapÖР
µÄһλ,Èç¹ûÔÚBitMapÖÐÕâλΪ0,Ôò˵Ã÷´ËÉÈÇøÎª¿Õ,·ñÔò˵Ã÷´ËÉÈÇøÒѱ»Ä³¸öÎļþÕ¼ 
ÓÃ.directoryFileÖ¸Ïò¸ùĿ¼Îļþ.NachosûÓÐʵÏֶ༶Ŀ¼½á¹¹,ËüÖ»ÓÐÒ»¸ö¸ùĿ¼, 
ÎļþϵͳµÄËùÓÐÎļþ¶¼·ÅÔÚ¸ùĿ¼ÏÂ. 
    FileSystemµÄÉú³Éº¯ÊýÓÐÒ»¸öformat²ÎÊý,Èç¹ûËüΪ·ÇÁã,½«¸ñʽ»¯(Format)Õû¸ö 
Îļþϵͳ,·ñÔò´ÓÄ£Äâ´ÅÅÌÉ϶Á³öÎļþϵͳµÄÐÅÏ¢. 
    FormatÎļþϵͳµÄ¹ý³ÌΪ: 
          1.Éú³ÉÒ»¸ö¿ÕµÄBitMapºÍ¸ùĿ¼. 
          2.°Ñ´ÅÅÌ0ÉÈÇø·ÖÅ䏸freeMapfileÎļþµÄÎļþ¿ØÖÆ¿é; 
                  1ÉÈÇø·ÖÅ䏸¸ùĿ¼µÄÎļþ¿ØÖÆ¿é. 
          3.ΪÕâÁ½¸öÎļþ·ÖÅä´ÅÅ̿ռä. 
          4.´ò¿ªÕâÁ½¸öÎļþ,¼´ÔÚÄÚ´æÖÐÉú³ÉÁ½¸öOpenFile¶ÔÏó. 
          5.°ÑfreeMapfile,directoryFileÁ½¸öÎļþд»Ø´ÅÅÌ. 
          6.Êͷź¯ÊýÖзÖÅäµÄ¸¨ÖúÄÚ´æ¿Õ¼ä,µ«freeMapfileºÍdirectoryFileÕâÁ½¸ö 
                  OpenFile¶ÔÏóÈÔÈ»±£ÁôÔÚÄÚ´æÖÐ. 
    Èç¹ûÉú³ÉÎļþϵͳʱ²»ÐèÒª¸ñʽ»¯,¾ÍÖ»Òª´Ó´ÅÅÌÉ϶Á³öfreeMapfile, 
directoryFileÁ½¸öÎļþ¼´¿É. 
    ÎļþϵͳÉú³Éºó,freeMapfile,directoryFileÕâÁ½¸öOpenFile¶ÔÏó×ÜÊDZ£ÁôÔÚÄÚ 
´æÖеÄ. 
 
    Creat(char* name, int initialSize)³ÉÔ±º¯ÊýÓÃÀ´´´½¨Ò»¸öÐÂÎļþ,ÐÂÎļþµÄÃû 
×ÖÊÇname,³¤¶ÈΪinitialSize,ËüµÄÖ´Ðйý³ÌÈçÏÂ: 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©· 
              ©§  ´Ó´ÅÅ̶ÁÈë¸ù  ©§ 
              ©§    Ä¿Â¼Îļþ    ©§ 
              ©»©¥©¥©¥©×©¥©¥©¥©¥©¿ 
                      ©§ 
                      ¡ý 
               ©¥©¥©¥©¥©¥©¥©¥©¥©¥ 
                   Ä¿Â¼ÖÐÒѾ­           Y 
                  ´æÔÚͬÃûÎļþ       ©¥©¥©¥©¥©¥©¥©· 
               ©¥©¥©¥©¥©¥©¥©¥©¥©¥                ©§ 
                      ©§                         ©§ 
                      ©§ N                       ©§ 
                      ¡ý                         ©§ 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©·               ©§ 
              ©§´Ó´ÅÅ̶ÁÈëBitMap©§               ©§ 
              ©§Îļþ,¸øÎļþ¿ØÖÆ ©§               ©§ 
              ©§¿é·ÖÅäÒ»¸öÉÈÇø  ©§               ©§ 
              ©»©¥©¥©¥©×©¥©¥©¥©¥©¿               ©§ 
                      ©§                         ©§ 
                      ©§                         ©§ 
                      ¡ý                         ©§ 
                 ©¥©¥©¥©¥©¥©¥©¥        N         ©§ 
                   ·ÖÅä³É¹¦      ©¥©¥©¥©¥©¥©¥©¥¡ú©§ 
                 ©¥©¥©¥©¥©¥©¥©¥                  ©§ 
                      ©§                         ©§ 
                      ©§ Y                       ©§ 
                      ¡ý                         ©§ 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©·               ©§ 
              ©§ ½«Îļþ¼ÓÈë¸ù   ©§               ©§ 
              ©§     Ä¿Â¼       ©§               ©§ 
              ©»©¥©¥©¥©×©¥©¥©¥©¥©¿               ©§ 
                      ©§                         ©§ 
                      ¡ý                         ©§ 
                 ©¥©¥©¥©¥©¥©¥          N         ©§ 
                   ³É¹¦¼ÓÈë      ©¥©¥©¥©¥©¥©¥©¥¡ú©§ 
                 ©¥©¥©¥©¥©¥©¥                    ©§ 
                      ©§                         ©§ 
                      ©§ Y                       ©§ 
                      ¡ý                         ©§ 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©·               ©§ 
              ©§   ÎªÎļþ·ÖÅä   ©§               ©§ 
              ©§   ´ÅÅ̿ռ䠠   ©§               ©§ 
              ©»©¥©¥©¥©×©¥©¥©¥©¥©¿               ©§ 
                      ©§                         ©§ 
                      ¡ý                         ©§ 
                 ©¥©¥©¥©¥©¥©¥         N          ©§ 
                   ·ÖÅä³É¹¦      ©¥©¥©¥©¥©¥©¥©¥¡ú©§ 
                 ©¥©¥©¥©¥©¥©¥                    ©§ 
                      ©§                         ©§ 
                      ©§  Y                      ©§ 
                      ¡ý                         ©§ 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©·               ©§ 
              ©§ ½«BitMapÎļþºÍ ©§               ©§ 
              ©§ ¸ùĿ¼ÎļþдÈë ©§               ©§ 
              ©§    ´ÅÅÌ        ©§               ©§ 
              ©»©¥©¥©¥©×©¥©¥©¥©¥©¿               ©§ 
                      ©§                         ©§ 
                      ©§                         ©§ 
                      ¡ý                         ¡ý 
              ©³©¥©¥©¥©¥©¥©¥©¥©¥©·       ©³©¥©¥©¥©¥©¥©¥©¥©¥©· 
              ©§   ·µ»ØTRUE     ©§       ©§   ·µ»ØFALSE    ©§ 
              ©»©¥©¥©¥©¥©¥©¥©¥©¥©¿       ©»©¥©¥©¥©¥©¥©¥©¥©¥©¿ 
 
    ÔÚCreatº¯ÊýµÄ´¦Àí¹ý³ÌÖÐÖ»ÐÞ¸ÄÄÚ´æÖеÄBitMapºÍ¸ùĿ¼,´ÅÅÌÉϵÄÊý¾Ý²»»á±» 
ÐÞ¸Ä,ÕâÑùÈç¹ûÎļþÉú³Éʧ°Ü,Ö»Òª·µ»ØFALSE¼´¿É.Èç¹ûÖ´Ðгɹ¦,²Å°ÑÕâÁ½¸öÎļþд 
»Ø´ÅÅÌ. 
    Remove(char* name)ɾ³ýÎļþÃûΪnameµÄÎļþ.ËüµÄÖ´Ðйý³ÌÈçÏÂ: 
          1.´Ó´ÅÅ̶ÁÈë¸ùĿ¼Îļþ. 
          2.Èç¹û¸ùĿ¼ÖÐûÓÐÕâ¸öÎļþ,Ôò·µ»ØFALSE. 
          3.¶ÁÈë´ËÎļþµÄÎļþ¿ØÖÆ¿é. 
          4.ÊÍ·Å´ËÎļþÕ¼ÓõĴÅÅÌÉÈÇø,²¢É¾³ýÆäĿ¼Ïî. 
          5.ÊÍ·Å´ËÎļþµÄÎļþ¿ØÖÆ¿éÕ¼ÓõĴÅÅÌÉÈÇø. 
          6.°ÑÐ޸ĺóµÄBitMapºÍĿ¼Îļþд»Ø´ÅÅÌ. 
          7.·µ»ØTRUE. 
    OpenFile* Open(char* name)³ÉÔ±º¯Êý´ò¿ªÃûΪnameµÄÎļþ,¿ÉÒÔÓ÷µ»ØµÄ 
OpenFileÖ¸Õë¶Áд´ËÎļþ.OpenµÄÖ´Ðйý³ÌÈçÏÂ: 
          1.½«Ä¿Â¼Îļþ¶ÁÈëÄÚ´æ. 
          2.ÓÃDirectory::Find(char* name)º¯ÊýÇó³önameÎļþµÄÎļþ¿ØÖÆ¿éËùÔÚÉÈ 
                 Çø. 
          3.¶ÁÈëÎļþ¿ØÖÆ¿é,²¢Éú³É´ËÎļþµÄOpenFile¶ÔÏó. 
          4.·µ»ØOpenFile¶ÔÏóµÄÖ¸Õë. 
    List³ÉÔ±º¯ÊýÏÔʾ¸ùĿ¼µÄÄÚÈÝ. 
    ¹Ø±ÕÎļþÖ»Ðëɾ³ý(delete)OpenFile¶ÔÏó¼´¿É. 
 
 
-- 
m¡ù À´Ô´:£®¹ÄÀËÌýÌÎÕ¾ bbs.xmu.edu.cn£®[FROM: mysu@JingXian.xmu.ed] m 
 
-- 
¡ù À´Ô´:¡¤BBS Ë®Ä¾µ÷ÊÔÕ¾ Leeward.lib.tsinghua.edu.cn¡¤[FROM: 166.111.68.98] 

BBSˮľÇ廪վ¡Ã¾«»ªÇø