} else {
copy(&openfile.file[i], &openfile.file[openfile.length - 1]); openfile.length--;
} }
int iopen(ofile *x)//向已打开文件列表中插入文件x->name {
int i;
i = sopen(x->name); if(i!=-1) { }
else if(openfile.length == n) { } else {
printf(\已打开文件表已满\return false;
printf(\文件已经打开\\n\return false;
15
}
}
copy(&openfile.file[openfile.length], x); openfile.length ++; return true;
int allocate()//分配一个磁盘块,返回块号 {
int i;
fseek(fc, 0, SEEK_SET);//将模拟磁盘的文件指针移至模拟磁盘FAT表 fread(buffer1,64L, 1, fc); for(i = 3; i < 63; i++) {
if(buffer1[i] == 0)//FAT中的第i项为0,分配第i块磁盘块,修改FAT表,并且写回磁盘
}
{ }
buffer1[i] = 255; fseek(fc, 0, SEEK_SET); fwrite(buffer1, 64L, 1, fc); return i; //返回磁盘号
fread(buffer1, 64L, 1, fc);//将FAT表中第二个磁盘块读入模拟缓冲buffer1
for(i = 0; i < 63; i++)
16
{
if(buffer1[i] == 0)//AT中的第i项为0,分配第i+64块磁盘块,修改FAT表,并且写回磁盘 { buffer1[i] = 255;
fseek(fc, -64L, SEEK_CUR); fwrite(buffer1, 64L, 1, fc);
return i + 64; //返回磁盘号
}
}
printf(\已经没有磁盘空间\\n\ return false;
}
int read_file(char *name, int length)//读取文件,文件名为name, 为length {
int i, t; char ch;
if((i=sopen(name)) == -1) { printf(\文件未打开或不存在\\n\
return false; }
if(openfile.file[i].flag == 1)
17
读取长度 {
printf(\文件以写方式打开,不能读\\n\ return false;
} t = 0;
fseek(fc, openfile.file[i].read.dnum * 64L, SEEK_SET); fread(buffer1, 64, 1, fc);
while(t < length && buffer1[openfile.file[i].read.bnum] != '#') {
putchar(buffer1[openfile.file[i].read.bnum]); //读出一个字符显示在屏幕上
if((t+1)d ==0) {
putchar('\\n');
}
openfile.file[i].read.bnum ++;//修改读指针
if(openfile.file[i].read.bnum >= 64) //一块读完,读取下一块 {
fseek(fc,openfile.file[i].read.dnum/64*64, SEEK_SET);
fread(buffer1, 64, 1, fc);
openfile.file[i].read.dnum=buffer1[openfile.file[i].read.dnumd];
openfile.file[i].read.bnum = 0; //修改读指针
fseek(fc, openfile.file[i].read.dnum *64L, SEEK_SET); fread(buffer1, 64, 1, fc);
18
} t++;
} }
int write_file(char *name, char *buff, int length) //name 文件路径名
//buff 存放准备写入磁盘的内容 //length 写入内容的长度 {
int i, t, dd;
if((i=sopen(name))== -1) { }
if(openfile.file[i].flag == 0) { } t = 0;
fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET); fread(buffer1,64,1,fc);
printf(\文件以只读方式打开,不能写\\n\return false;
printf(\文件未打开或不存在\\n\return false;
19