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

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

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

{

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); while(t

buffer1[openfile.file[i].write.bnum]=buff[t]; openfile.file[i].write.bnum++; openfile.file[i].length++;

if(openfile.file[i].write.bnum>=64) {

fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET); fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/ if((dd=allocate())==false) {

openfile.file[i].write.bnum--; openfile.file[i].length--;

printf(\无磁盘空间,部分信息丢失,写失败\\n\return (false);

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

printf(\文件没有打开或不存在\\n\return (false);

}/*if*/

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

buffer1[openfile.file[i].write.dnumd]=dd;

fseek(fc,openfile.file[i].write.dnum/64*64L, SEEK_SET);

fwrite(buffer1,64,1,fc); openfile.file[i].write.dnum=dd; openfile.file[i].write.bnum=0;

}/*if*/ t++;

}/*while*/

fseek(fc, openfile.file[i].write.dnum*64L, SEEK_SET); fwrite(buffer1,64,1,fc);/*一块写完,写回磁盘*/

}/*写函数结束*/

int search(char *name,int flag,int *dnum,int *bnum) /*查找路径名为name的文件或目录,返回该目录的起始盘块号 */ //char *name;

//int flag; /*flag=8表示查找目录,否则为文件*/

//int *dnum,*bnum;/*返回找到文件或目录的目录项的位置:盘块dnum中第bnum项*/ {

for(s=0;name[k]!='.'&&name[k]!='/'&&s<3&&name[k]!='\\0';s++,k++)

pna[s]=name[k]; pna[s]=' ';

for(;s<3;s++)/*用空格补全名字长度*/ int k,i,s,j,last=0; char pna[3],type[2];

if((strcmp(name,\

return(2);

*/

//P175

k=0;

if(name[0]=='/')k=1;

i=2; /*i=根目录的起始盘块号*/ while(last!=1) {

/*pna=从name中分离出\后一个目录名(或文件名)*/

*/ &

while(name[k]!='.'&&name[k]!='\\0'&&name[k]!='/')/*除去多余字符

k++;

type[0]=type[1]=' ';

if(name[k]=='.')/*取文件类型名type*/

if(flag==8) { } else

{/*文件遇到类型名认为结束,后面的字符作废*/ } else

if(name[k]!='\\0')k++; if(name[k]=='\\0')

last=1;

/*查找目录且名字等于pna的目录项*/ fseek(fc,i*64L,SEEK_SET); fread(buffer2,64L,1,fc); j=0;

if(last==1&&flag!=8) k++;

if(name[k]!='\\0')type[0]=name[k]; k++;

if(name[k]!='\\0')type[1]=name[k]; if(name[k]!='\\0'&&name[k+1]!='\\0') { } last=1;

printf(\文件名错误\\n\return(false);

printf(\目录不应该有有类型名,查找失败\\n\return(false);

while(j<8&&!(buffer2[j].attribute!=8&&buffer2[j].name[0]==pna[0]&

j++;

buffer2[j].name[1]==pna[1]&&buffer2[j].name[2]==pna[2]&& buffer2[j].type[0]==type[0]&&buffer2[j].type[1]==type[1]))

else

while(j<8&&!(buffer2[j].attribute==8&&buffer2[j].name[0]==pna[0]&

&&buffer2[j].name[2]==pna[2])) j++;

if(last==1)/*查找结束*/ {

*dnum=i; *bnum=j;

return(buffer2[j].address);

&buffer2[j].name[1]==pna[1]

if(j<8)/*找到该目录或文件*/

} else/*查找还未结束*/

i=buffer2[j].address;/*读取下一个盘块*/ return(false); else

//P176

}/*while 查找结束*/

}/*search()结束*/

int create_file(char *name,int attribute) /*建立文件函数,路径名name,文件属性attribute*/ //char *name; //int attribute; {

int i,j,k,s,d,t,b,dd,dn,bn;

char dname[3],tname[2],pathname[20];

OFILE x;

if(attribute%2==1) { }

if(openfile.length==n) { }

/* 将name分成两部分,目录路径pathname和目录名dname*/ for(j=0;name[j]!='\\0';j++)/*查找最后一个“/”*/

if(name[j]=='/')s=j; /*分离目录路径*/ for(j=0;j

pathname[j]=name[j]; pathname[j]='\\0'; /*分离文件名*/

for(k=0,j=s+1;name[j]!='\\0'&&k<3&&name[j]!='.';j++,k++) { }

for(;k<3;k++)

dname[k]=' '; k=0;

if(name[j++]=='.')/*分离类型名*/ { }

for(;k<2;k++)

for(;name[j]!='\\0'&&k<2&&name[j]!='.';j++,k++)

tname[k]=name[j];

printf(\错误文件名或目录名\\n\return(false); dname[k]=name[j]; if(k==0)

printf(\已打开表已满,不能建立\\n\return(false);

printf(\只读文件,无法写,不能建立\\n\return(false);

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

{inti,t,dd;if((i=sopen(name))==-1)/*文件不存在,无法写*/{}if(openfile.file[i].flag==0){}t=0;fseek(fc,openfile.file[i].write.dnum*6
推荐度:
点击下载文档文档为doc格式
2sudb8d8yq0088t3wpqi
领取福利

微信扫码领取福利

微信扫码分享