資源簡介
可以實現下列幾條命令:
Login 用戶登錄
Dir 列文件目錄
Create 創建文件
Delete 刪除文件
Open 打開文件
Close 關閉文件
Read 讀文件
Write 寫文件
Login 用戶登錄
Dir 列文件目錄
Create 創建文件
Delete 刪除文件
Open 打開文件
Close 關閉文件
Read 讀文件
Write 寫文件
代碼片段和文件信息
#include?“filesys.h“
int?physic[100];???????????//文件地址緩沖區
int?style=1;???????????????//文件的類型
char?cur_dir[10]=“root“;???//當前目錄?
void?format()?????//格式化
{
int?ijk;
super_block.n=50;
for(i=0;i<50;i++)????????????//超級塊初始化
{
super_block.free[i]=i; //存放進入棧中的空閑塊
super_block.stack[i]=i+50;??//存放下一組的盤塊
}
for(i=0;i<640;i++) //i結點信息初始化
{
for(j=0;j<100;j++)
{
i_node[i].file_address[j]=-1;//文件地址
}
i_node[i].file_length=-1;??//文件長度
i_node[i].file_style=-1;??//文件類型
}
for(i=0;i<640;i++)?????//根目錄區信息初始化
{
strcpy(root[i].file_name““);
root[i].i_num=-1;
strcpy(root[i].dir_name““);
}?
for(i=0;i<20449;i++)?????//存儲空間初始化?
{
memory[i].n=0;??????
memory[i].a=0;??????
for(j=0;j<50;j++)
{
memory[i].free[j]=-1;
}
}
for(i=0;i<20449;i++)????//將空閑塊的信息用成組鏈接的方法寫進每組的最后一個塊中
{ //存儲空間初始化
if((i+1)%50==0)
{
k=i+1;
for(j=0;j<50;j++)
{
if(k<20450)
{
memory[i].free[j]=k;//下一組空閑地址
memory[i].n++;??//下一組空閑個數???注意在memory[i].n++之前要給其賦初值
k++;
}
else
{
memory[i].free[j]=-1;
}
}
memory[i].a=0;????//標記為沒有使用
continue;?????//處理完用于存儲下一組盤塊信息的特殊盤塊后,跳過本次循環
}
for(j=0;j<50;j++)
{
memory[i].free[j]=-1;
}
memory[i].n=0;??
}
printf(“已經初始化完畢\n“);
printf(“進入文件模擬.....\n\n“);
}
void?write_file(FILE?*fp)????//將信息讀入系統文件中
{
int?i;
fp=fopen(“system““wb“);
for(i=0;i<20449;i++)
{
fwrite(&memory[i]sizeof(struct?block)1fp);
}
fwrite(&super_blocksizeof(struct?block_super)1fp);
for(i=0;i<640;i++)
{
fwrite(&i_node[i]sizeof(struct?node)1fp);
}
for(i=0;i<640;i++)
{
fwrite(&root[i]sizeof(struct?dir)1fp);
}
fclose(fp);
}
void?read_file(FILE?*fp)???//讀出系統文件的信息
{
int?i;
fp=fopen(“system““rb“);
for(i=0;i<20449;i++)
{
fread(&memory[i]sizeof(struct?block)1fp);
}
fread(&super_blocksizeof(struct?block_super)1fp);
for(i=0;i<640;i++)
{
fread(&i_node[i]sizeof(struct?node)1fp);
}
for(i=0;i<640;i++)
{
fread(&root[i]sizeof(struct?dir)1fp);
}
fclose(fp);
}
void?callback(int?length)????//回收磁盤空間
{
int?ijkmq=0;
for(i=length-1;i>=0;i--)
{
k=physic[i];?????//需要提供要回收的文件的地址
m=49-super_block.n;????//回收到棧中的哪個位置
if(super_block.n==50)???//注意?當super_block.n==50時?m=-1;的值
{????????//super_block.n==50的時候棧滿了,要將這個棧中的所有地址信息寫進下一個地址中
for(j=0;j<50;j++)
{
memory[k].free[j]=super_block.free[j];
}
super_block.n=0;
memory[k].n=50;
}
memory[k].a=0;?
if(m==-1)
{
m=49;??????//將下一個文件地址中的盤塊號回收到棧底中,這個地址中存放著剛才滿棧的地址的信息?
}
super_block.free[m]=physic[i];?//將下一個文件地址中的盤塊號回收到棧中
super_block.n++;
}
}
void?allot(int?length)?????//分配空間
{
int?ijkmp;
for(i=0;i {
k=50-super_block.n;????//超級塊中表示空閑塊的指針
m=super_block.free[k];???//棧中的相應盤塊的地址
p=super_block.free[49];???//棧中的最后一個盤塊指向的地址
if(m==-1||memory[p].a==1)??//檢測是否還有下一組盤塊
{
print
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????33671??2009-06-25?22:44??myProject\Debug\c.obj
?????文件??????38644??2009-07-01?17:39??myProject\Debug\fileSys.obj
?????文件??????????0??2009-07-01?17:39??myProject\Debug\fileSys.sbr
?????文件??????58368??2009-07-01?17:39??myProject\Debug\myProject.bsc
?????文件?????213083??2009-07-01?17:39??myProject\Debug\myProject.exe
?????文件?????305008??2009-07-01?17:39??myProject\Debug\myProject.ilk
?????文件?????229788??2009-07-01?17:39??myProject\Debug\myProject.pch
?????文件?????508928??2009-07-01?17:39??myProject\Debug\myProject.pdb
?????文件??????50176??2009-07-01?17:47??myProject\Debug\vc60.idb
?????文件??????53248??2009-07-01?17:39??myProject\Debug\vc60.pdb
?????文件??????????7??2009-07-01?17:47??myProject\filename
?????文件??????13409??2009-06-29?16:55??myProject\fileSys.cpp
?????文件????????730??2009-06-29?16:05??myProject\fileSys.h
?????文件??????33671??2009-06-25?22:44??myProject\myProject\Debug\c.obj
?????文件??????38189??2009-07-01?17:37??myProject\myProject\Debug\fileSys.obj
?????文件??????????0??2009-07-01?17:37??myProject\myProject\Debug\fileSys.sbr
?????文件??????58368??2009-07-01?17:37??myProject\myProject\Debug\myProject.bsc
?????文件?????213083??2009-07-01?17:37??myProject\myProject\Debug\myProject.exe
?????文件?????297560??2009-07-01?17:37??myProject\myProject\Debug\myProject.ilk
?????文件?????229788??2009-07-01?17:36??myProject\myProject\Debug\myProject.pch
?????文件?????508928??2009-07-01?17:37??myProject\myProject\Debug\myProject.pdb
?????文件??????50176??2009-07-01?17:37??myProject\myProject\Debug\vc60.idb
?????文件??????53248??2009-07-01?17:36??myProject\myProject\Debug\vc60.pdb
?????文件??????????4??2009-06-29?17:01??myProject\myProject\filename
?????文件??????13409??2009-06-29?16:55??myProject\myProject\fileSys.cpp
?????文件????????730??2009-06-29?16:05??myProject\myProject\fileSys.h
?????文件???????4378??2009-06-29?17:01??myProject\myProject\myProject.dsp
?????文件????????541??2009-06-25?09:49??myProject\myProject\myProject.dsw
?????文件??????58368??2009-07-01?17:38??myProject\myProject\myProject.ncb
?????文件??????48640??2009-07-01?17:38??myProject\myProject\myProject.opt
............此處省略15個文件信息
評論
共有 條評論