操作系统课程设计文件系统模拟毕业设计论文word格式

上传人:博****1 文档编号:563133348 上传时间:2022-11-27 格式:DOC 页数:46 大小:129.50KB
返回 下载 相关 举报
操作系统课程设计文件系统模拟毕业设计论文word格式_第1页
第1页 / 共46页
操作系统课程设计文件系统模拟毕业设计论文word格式_第2页
第2页 / 共46页
操作系统课程设计文件系统模拟毕业设计论文word格式_第3页
第3页 / 共46页
操作系统课程设计文件系统模拟毕业设计论文word格式_第4页
第4页 / 共46页
操作系统课程设计文件系统模拟毕业设计论文word格式_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《操作系统课程设计文件系统模拟毕业设计论文word格式》由会员分享,可在线阅读,更多相关《操作系统课程设计文件系统模拟毕业设计论文word格式(46页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计-文件系统模拟默认分类 2010-01-10 16:51:02 阅读102 评论0 字号:大中小 设计内容:在Windows 2000/XP环境下,在U盘上创建一个数据文件来模仿微型计算机磁盘存储器,在此基础上建立磁盘文件系统。要求模拟编写完成模拟链接存储结构文件系统的一个文件复制命令(要求可以单个和成批复制文件)。#include #include #include #include #define NAMELENGTH 21 /文件名的最大长度#define MAXFILE 20 /最大能拥有的文件个数#define PATH G:disk.txt /当作磁盘的文件disk

2、.txt保存路径#define INT_NUM 250 /位示图有INT_NUM个int单元,这里可保存250 * 32 = 8000个记录块using namespace std;class FCB/文件控制块类public:FCB(char *filename = NULL, int ID = -1, int p = -1, int inum = 0);void Setfilename(char *filename);void SetID(int ID);void Setfp(int fp);void Setnotenum(int inum = 0); /设置inotenum int Ge

3、tnotenum(); /返回inotenumvoid Notenum_addone(); /inotenum加1char* Getfilename();int GetID();int Getfp();private: char sFilenameNAMELENGTH; /文件名 int iID; /ID号 int fp; /头指针 int inotenum; /占用记录块个数;FCB:FCB(char *filename, int ID, int p, int inum) /构造函数if (filename != NULL)strcpy(sFilename, filename);elsest

4、rcpy(sFilename, *);iID = ID;fp = p;inotenum = inum;void FCB:Setnotenum(int inum) /设置该文件已占用的文件记录块数,默认形参值为0 inotenum = inum;void FCB:Notenum_addone() /该文件已占用的记录块数加1inotenum +;int FCB:Getnotenum() /返回该文件已占用的记录块数return inotenum;char* FCB:Getfilename()/ 返回文件名return sFilename;int FCB:GetID()/返回文件ID号return

5、 iID;int FCB:Getfp()/返回文件头指针return fp;void FCB:Setfilename(char *filename) /设置文件名if (filename != NULL)strcpy(sFilename, filename);elsesFilename0 = 0;void FCB:SetID(int ID) /设置IDiID = ID;void FCB:Setfp(int p) /设置fpfp = p;class Filenoteblock /文件记录块类public: char scontent10; /内容 int next; /块指针;class FCB

6、Table /文件控制块表类public:FCBTable();int Search_free_note(unsigned &uflag, unsigned &n); /返回可用块地址void Setbitmap(unsigned uflag, unsigned n); /修改位示图, 占有空闲块void Freebitmap(int ip); /修改位示图, 释放空间FCB stTableMAXFILE; /文件控制块表int iFilenum; /已有文件控制块int iusednum; /已占用的记录块数private: int ibitmapINT_NUM; /位示图, 最多可存入IN

7、I_NUM * 32个记录块;FCBTable:FCBTable() /构造函数int i, n, mod, k, j;unsigned uflag;iFilenum = 0; /初始化为0 iusednum = 0;for (i=0; iINT_NUM; i+) ibitmapi = 0;/将位示图的前n位置为1, dist.txt文件的前n个记录块用来存放文件控制块表 n = sizeof(FCBTable) / sizeof(Filenoteblock);if (sizeof(FCBTable) % sizeof(Filenoteblock) != 0)n +;i = n / 32;mo

8、d = n % 32;if (mod != 0)/不能整除 i +; for (k=0; ki-1; k+) uflag = 1;for (j=0; j32; j+) ibitmapk = ibitmapk | uflag; uflag = uflag 1; uflag = 1; for (j=0; jmod; j+) ibitmapi-1 = ibitmapi-1 | uflag; uflag = uflag 1; else /整除for (k=0; ki; k+)uflag = 1;for (j=0; j32; j+) ibitmapk = ibitmapk | uflag;uflag =

9、 uflag 1;void FCBTable:Setbitmap(unsigned uflag, unsigned n) /修改位示图,占有空闲块ibitmapn = ibitmapn | uflag;void FCBTable:Freebitmap(int ip) /释放空间 unsigned uflag; int i, j, k;i = ip / 32;j = ip % 32;uflag = 1;for (k=0; kj; k+)uflag = uflag * 2; uflag = uflag; ibitmapi = ibitmapi & uflag;int FCBTable:Search

10、_free_note(unsigned &uflag, unsigned &n) /寻找空闲块unsigned i, j;for (i=0; i250; i+)n = i;uflag = 1;for (j=0; j32; j+) if (ibitmapi & uflag) = 0) return (i * 32 + j); uflag = uflag 1;return -1;/寻找空闲的文件控制块, 若找到返回其它位置,否则返回-1int Search_free_FCB(FCBTable ftable) int i; for (i=0; iMAXFILE; i+) if (strcmp(fta

11、ble.stTablei.Getfilename(), *) = 0) return i; return -1;int Createfile(FCBTable &ftable, char *filename)/创建一个文件 int Fileexist(FCBTable ftable, char *name); FILE *fp; char buff10, c; int i, ip1, ip2; int iFCBlocate; /标记某文件在文件控制块表中的位置或空闲块位置 bool bFirsttime; Filenoteblock note1, note2; /文件记录块 unsigned

12、uflag, n; if (filename = NULL) cout无文件名, 文件创建失败!endl; return -1; if (Fileexist(ftable, filename) != -1) cout文件 filename 已存在, 创建失败!endl; return -1; if (ftable.iFilenum = MAXFILE -1) cout打开文件数已达到最大数量,文件创建失败!endl; return -1; if (ftable.Search_free_note(uflag, n) = -1) /判断是否还有一空闲块 cout无空闲空间, 文件创建失败!endl; return -1; if (fp = fopen(PATH, rb+) = NULL) /打开作为磁盘的文件 if (fp = fopen(PATH, wb) = NULL) cout文件创建失败!endl; return -1; fclose(fp); if (fp = fopen(PATH, rb+) = NULL) cout文件创建失败!endl; return -1; iFCBlocate = Search_free_FCB(ftable); /找到一个空闲块,上面保证了有 ftable.stTableiF

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号