操作系统实验报告模板 联系客服

发布时间 : 星期一 文章操作系统实验报告模板更新完毕开始阅读030dc12d4b35eefdc8d333e1

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

/*--------为了避免该目录下同名文件夹--------*/

for(i = 1;i

if(dir->fcb[i].type==DIRECTORY &&

strcmp(dir->fcb[i].fname,sonfname)==0 ) {

printf(\该文件夹下已经有同名的文件夹存在了!\\n\ return 0; } }

//查找空白fcb序号

for(i=1;i

if(dir->fcb[i].type==NULL) break; }

if(i==BlockFcbCount) {

printf(\该目录已满!请选择新的目录下创建!\\n\

return 0; }

temp=i;

for(i = 3;i < BlockCount;i++) {

if(osPoint->FAT1[i] == 0) break; }

if(i == BlockCount) {

printf(\磁盘已满!\\n\ return 0; }

iFAT=i;

/*-------------接下来进行分配----------*/

osPoint->FAT1[iFAT]=osPoint->FAT2[iFAT] = 2; //2表示分配给下级目录文件 //填写该分派新的盘块的参数 strcpy(dir->fcb[temp].fname,sonfname); dir->fcb[temp].type=DIRECTORY;

dir->fcb[temp].fatherBlockNum=current; dir->fcb[temp].currentBlockNum=iFAT;

//初始化子目录文件盘块 dir=(struct dirFile*)(osPoint->data [iFAT-3]); //定位到子目录盘块号 dir->init (current,iFAT,sonfname);//iFAT是要分配的块号,这里的current用来指要分配的块的父块号

printf(\------------------\\n\\n\ return 1; }

/*-------删除当前目录下的文件夹--------*/ int rmdir(char *sonfname) {

int i,temp,j;//确保当前目录下有该文件,并记录下该FCB下标

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

for(i=1;i

if(dir->fcb[i].type==DIRECTORY

&&

strcmp(dir->fcb[i].fname,sonfname)==0) { break; } }

temp=i;

if(i==BlockFcbCount) {

printf(\当前目录下不存在该子目录!\\n\ return 0; }

j = dir->fcb[temp].currentBlockNum; struct dirFile *sonDir; //当前子目录的指针

sonDir=(struct dirFile *)(osPoint->data [ j - 3]);

for(i=1;i

if(sonDir->fcb[i].type!=NULL) {

printf(\该文件夹为非空文件夹,为确保安全,请清空后再删除!\\n\ return 0;

} }

/*开始删除子目录操作*/

osPoint->FAT1[j] = osPoint->FAT2[j]=0; //fat清空

char *p=osPoint->data[j-3]; //格式化子目录

memset(p,0,BlockSize);

dir->fcb[temp].initialize(); //回收子目录占据目录项

printf(\------------------\\n\\n\ return 1; }

/*-----------在当前目录下创建文本文件---------------*/ int create(char *name) {

int i,iFAT;//temp,

int emptyNum = 0,isFound = 0; //空闲目录项个数

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

//查看目录是否已满 //为了避免同名的文本文件 for(i=1;i

if(dir->fcb[i].type == NULL && isFound == 0) {

emptyNum = i; isFound = 1; }

else if(dir->fcb[i].type==GENERAL && strcmp(dir->fcb[i].fname,name)==0 ) {

printf(\无法在同一目录下创建同名文件!\\n\ return 0; } }

if(emptyNum == 0) {

printf(\已经达到目录项容纳上限,无法创建新目录!\\n\ return 0; }

//查找FAT表寻找空白区,用来分配磁盘块号j

for(i = 3;i

{

if(osPoint->FAT1[i]==0) break; }

if(i==BlockCount) {

printf(\磁盘已满!\\n\ return 0; } iFAT=i;

/*------进入分配阶段---------*/ //分配磁盘块 osPoint->FAT1[iFAT] = osPoint->FAT2[iFAT] = 1;

/*-----------接下来进行分配----------*/

//填写该分派新的盘块的参数

strcpy(dir->fcb[emptyNum].fname,name); dir->fcb[emptyNum].type=GENERAL;

dir->fcb[emptyNum].fatherBlockNum=current;

dir->fcb[emptyNum].currentBlockNum=iFAT;

dir->fcb[emptyNum].size =0; char* p = osPoint->data[iFAT -3]; memset(p,4,BlockSize);

printf(\-------------------\\n\\n\ return 1; }

/*-------查询子目录------------*/ int listshow() {

int i,DirCount=0,FileCount=0; //搜索当前目录

struct dirFile *dir; //当前目录的指针

if(current==2)

dir=&(osPoint->root); else

dir=(struct dirFile *)(osPoint->data [current-3]);

for(i=1;i

if(dir->fcb[i].type==GENERAL) { //查找普通文件 FileCount++; printf(\ 文本文件./n\ }

if(dir->fcb[i].type==DIRECTORY) { //查找目录文件 DirCount++;