好文档 - 专业文书写作范文服务资料分享网站

操作系统实习报告(磁盘文件操作)

天下 分享 时间: 加入收藏 我要投稿 点赞

{

char name[20]; /*文件绝对路径名*/

char attribute;/*文件的属性,用1个字节表示,所以用了char类型*/ int number; /*文件起始盘块号*/

int length; /*文件长度,文件占用的字节数*/

int flag; /*操作类型,用\表示以读操作方式开文件,用\表示写操作pointer read; /*读文件的位置,文件刚打开时dnum为文件起始盘块号,bnumpointer write; /*写文件的位置,文件建立时dnum为文件起始盘块号,bnum

方式打开文件*/ 为\

为\,打开时为文件末尾*/

}OFILE; /*已打开文件表项类型定义*/ struct {

char buffer1[64];/*模拟缓冲1*/ content buffer2[8];/*模拟缓冲2*/ FILE *fc; /*模拟磁盘的文件指针*/

void copen(OFILE *x1,OFILE *x2) //OFILE *x1,*x2; { }

strcpy(x1->name,x2->name); x1->attribute=x2->attribute; x1->number=x2->number; x1->length=x2->length; x1->flag=x2->flag;

x1->read.dnum=x2->read.dnum; x1->read.bnum=x2->read.bnum; x1->write.dnum=x2->write.dnum; x1->write.bnum=x2->write.bnum; OFILE file[n]; /*已打开文件表*/

int length; /*已打开文件表中登记的文件数量*/

}openfile; /*已打开文件表定义*/

int sopen(char *name) /*

//P172 //char *name; {

void dopen(char *name)

/*在已打开文件表中删除文件name*/ //char *name; {

int iopen(content *x)

/*在已打开文件表中插入文件name*/ //content *x; {

int i;

i=sopen(name); if(i==-1) { }

copen(&openfile.file[i],&openfile.file[openfile.length-1]); openfile.length--; printf(\文件未打开\\n\else int i; i=0;

while(i

i++; return(-1);

name*/

依次查找已打开文件表*/

if(i>=openfile.length) return(i);

}/*查找sopen函数结束*/

}/*删除函数结束*/

int i;

i=sopen(x->name); if(i!=-1) { }

else if(openfile.length==n) { } else { }

//copen(&openfile.file[openfile.length],x); openfile.length++; return(true);

printf(\已打开文件表已满\\n\return(false);

printf(\文件已经打开\\n\return(false);

}/*填写已打开文件表函数结束*/

int allocate( )

/*分配一个磁盘块,返回块号*/ { */

//P173

int i;

fseek(fc,0,SEEK_SET); /*将模拟磁盘的文件指针移至模拟磁盘FAT表*/ fread(buffer1,64L,1,fc);/*将FAT表中第一个磁盘块读入模拟缓冲for(i=3;i<63;i++)

if(buffer1[i]==0)

{ /*FAT中的第i项为0,分配第i块磁盘块,修改FAT表,并且写回磁盘

buffer1中*/

buffer1[i]=255;

}

fseek(fc,0,SEEK_SET); fwrite (buffer1,64L,1,fc); return(i); /*返回磁盘号*/

fread(buffer1,64L,1,fc);/*将FAT表中第二个磁盘块读入模拟缓冲for(i=0;i<63;i++)

if(buffer1[i]==0)

{/*FAT中的第i项为0,分配第i+64块磁盘块,修改FAT表,并且写 }

printf(\已经没有磁盘空间\\n\return(false);

buffer1[i]=255;

fseek(fc,-64L,SEEK_CUR); fwrite(buffer1,64L,1,fc); return(i+64); /*返回磁盘号*/

buffer1中*/

回磁盘*/

}/*分配磁盘块函数结束*/

int read_file(char *name,int length)

/*读文件函数,文件路径名name,读取长度length*/ //char *name; //int length; {

int i,t; //char ch;

if((i=sopen(name))==-1) { }

if(openfile.file[i].flag==1) {

printf(\文件以写方式打开,不能读\\n\printf(\文件没有打开或不存在\\n\return (false);

}

return 0;

t=0;

fseek(fc,openfile.file[i].read.dnum*64L,SEEK_SET); fread(buffer1,64,1,fc);

while(t

openfile.file[i].read.dnum=buffer1[openfile.file[i].read.dnumd] }

} t++;

openfile.file[i].read.bnum=0;

fseek(fc,openfile.file[i].read.dnum*64L,SEEK_SET); fread(buffer1,64,1,fc);/*读取下一个*/

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);

里是在屏幕上显示)*/

;/*修改读指针*/

}/*读函数结束*/

int write_file(char *name,char *buff,int length)

//P174 /*写文件函数*/

//char *name;/*文件路径名*/

//char *buff;/*存放准备写入磁盘的内容*/ //int length;/*写入内容的长度*/

操作系统实习报告(磁盘文件操作)

{charname[20];/*文件绝对路径名*/charattribute;/*文件的属性,用1个字节表示,所以用了char类型*/intnumber;/*文件起始盘块号*/intlength;/*文件长度,文件占用的字节数*/intflag;/*操作类型,用\表示以读操作方式开文件,用\表示
推荐度:
点击下载文档文档为doc格式
2sudb8d8yq0088t3wpqi
领取福利

微信扫码领取福利

微信扫码分享