泡泡网 "Be fresh and eager every morning, and tired and satisfied every night." --Kent Beck

LAB06: Design & Implementation of a Mini File System

实验基本要求:

  1. 本实验分两次实验课完成,可以在任何平台下用标准C编程。
  2. 把一个文件模拟为一块磁盘,在此磁盘上构建一个简单的文件系统,至少实现下列三个函数的功能:
    /* 所有与文件系统有关的初始化工作都在此完成。成功返回非0值,否则返回0 */
    int init_fs(void);

    /* 从文件filename的头部开始读size大小的内容到buf。如果文件实际内容不够size,就有多少读多少。返回实际读入的字节数。如果出错,返回0 */

    int my_read(const char* filename, void* buf, int size);

    /* 把buf指向的size大小的内容写入到文件filename。如果文件不存在,就新建。存在,就覆盖。成功返回非0值,否则返回0 */
    int my_write(const char* filename, void* buf, int size);

实验内容:

  1. 在满足上述基本要求的基础上,你可以自己编写demo程序,也可以使用下面提供的框架;
  2. minifs.c(for win & linux)包含本次实验的框架代码。
  3. 下列宏和函数可供使用:
    #define SECTOR_SIZE 256 /* 每个扇区的大小 */
    #define TOTAL_SECTOR 128
    /* 扇区总数 */

    /* 把磁盘的第sector个扇区内容读入到buf,sector从0开始编号。 运行正确返回非0值,错误返回0 */
    int read_disk(int sector, void* buf);

    /* 把buf中SECTOR_SIZE个字节的数据写到磁盘的第sector个扇区,sector从0开始编号,运行正确返回非0值,错误返回0 */
    int write_disk(int sector, void* buf);
  4. 主程序可以用来测试。它在当前目录维护一个vdisk.dat文件,作为虚拟磁盘文件。read_disk()和write_disk()实际上都是读写这个文件。程序重新运行,文件内容并不丢失。此文件在初始状态都用0填充。
  5. 执行程序后,根据提示选择是读文件还是写文件。并输入文件名。写文件时还需要输入文件内容,按F6+回车表示输入结束。读文件时直接显示读出的文件内容。
  6. 如果你能让这个文件系统更完善,提供更全面的文件访问功能,可获得最高5分的加分。

实验报告内容:

  1. 用文字和图表描述你设计的文件系统;
  2. 把带有注释的源代码附到实验报告后。

下载:

  1. 实验报告模板(doc
  2. 示例程序 for Win32 & Linux

评分标准:

  1. 对课堂表现分来说,能写入一个文件并正确读出内容即算完成实验。
  2. 实验报告中源代码的分通过学生演示程序,当堂给出,标准如下:
    • 代码中有精当的注释(1分)
    • 代码风格良好(1分)
    • 写入一个文件,可以正确读出(4分)
    • 写入一个文件,重新执行程序后,可以正确读出(2分)
    • 写入同名文件,可以覆盖原有内容(2分)
    • 可以正确写入和读出大于256个字节的文件(2分)
  3. 指导教师可以针对代码提出问题,如学生不能准确作答,直接认定为抄袭

黑ICP备05004784号