資源簡介
在內存空間上模擬文件系統操作,支持指令有ls,pwd,mkdir,rmdir,mv,touch,rm,read,write

代碼片段和文件信息
#include“DiskOperate.h“
#include
#include
char*?systemStartAddr;??//系統起始地址
//初始化系統
void?initSystem()
{
????//創建空間
????systemStartAddr?=?(char*)malloc(system_size?*?sizeof(char));
????//初始化盤塊的位示圖
????for(int?i=0;?i ????????systemStartAddr[i]?=?‘0‘;
????//用于存放位示圖的空間已被占用
????int?bitMapSize?=?block_count?*?sizeof(char)?/?block_szie;//位示圖占用盤塊數:100
????for(int?i=0;?i ????????systemStartAddr[i]?=?‘1‘;???//盤塊已被使用
}
//退出系統
void?exitSystem()
{
????free(systemStartAddr);
}
//磁盤分配
int?getBlock(int?blockSize)
{
????int?startBlock?=?0;
????int?sum=0;
????for(int?i=0;?i ????{
????????if(systemStartAddr[i]?==?‘0‘)//可用盤塊
????????{
????????????if(sum?==?0)//剛開始,設置開始盤塊號
????????????????startBlock?=?i;
????????????sum++;
????????????if(sum?==?blockSize)//連續盤塊是否滿足需求
????????????{
????????????????//滿足分配,置1
????????????????for(int?j=startBlock;?j ????????????????????systemStartAddr[j]?=?‘1‘;
????????????????return?startBlock;
????????????}
????????}
????????else//已被使用連續已經被打斷
????????????sum?=?0;
????}
????printf(“not?found?such?series?memory?Or?memory?is?full\n“);
????return?-1;
}
//獲得盤塊的物理地址
char*?getBlockAddr(int?blockNum)
{
????return?systemStartAddr?+?blockNum?*?block_szie;?//偏移量單位為字節
}
//獲得物理地址的盤塊號
int?getAddrBlock(char*?addr)
{
????return?(addr?-?systemStartAddr)/block_szie;
}
//釋放盤塊、
int?releaseBlock(int?blockNum?int?blockSize)
{
????int?endBlock?=?blockNum?+?blockSize;
????//修改位示圖盤塊的位置為0
????for(int?i=blockNum;?i ????????systemStartAddr[i]?=?‘0‘;
????return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1826??2017-06-26?23:19??DiskOperate.cpp
?????文件????????542??2017-06-27?16:53??DiskOperate.h
?????文件??????11360??2017-06-27?19:03??FileOperate.cpp
?????文件???????1997??2017-06-27?13:13??FileOperate.h
?????文件?????262359??2017-06-27?19:18??FileSystem.exe
?????文件???????4832??2017-06-27?16:15??main.cpp
-----------?---------??----------?-----??----
???????????????282916????????????????????6
評論
共有 條評論