操作系统实验文件管理代码.docx

上传人:b****0 文档编号:17441361 上传时间:2023-07-25 格式:DOCX 页数:19 大小:16.95KB
下载 相关 举报
操作系统实验文件管理代码.docx_第1页
第1页 / 共19页
操作系统实验文件管理代码.docx_第2页
第2页 / 共19页
操作系统实验文件管理代码.docx_第3页
第3页 / 共19页
操作系统实验文件管理代码.docx_第4页
第4页 / 共19页
操作系统实验文件管理代码.docx_第5页
第5页 / 共19页
操作系统实验文件管理代码.docx_第6页
第6页 / 共19页
操作系统实验文件管理代码.docx_第7页
第7页 / 共19页
操作系统实验文件管理代码.docx_第8页
第8页 / 共19页
操作系统实验文件管理代码.docx_第9页
第9页 / 共19页
操作系统实验文件管理代码.docx_第10页
第10页 / 共19页
操作系统实验文件管理代码.docx_第11页
第11页 / 共19页
操作系统实验文件管理代码.docx_第12页
第12页 / 共19页
操作系统实验文件管理代码.docx_第13页
第13页 / 共19页
操作系统实验文件管理代码.docx_第14页
第14页 / 共19页
操作系统实验文件管理代码.docx_第15页
第15页 / 共19页
操作系统实验文件管理代码.docx_第16页
第16页 / 共19页
操作系统实验文件管理代码.docx_第17页
第17页 / 共19页
操作系统实验文件管理代码.docx_第18页
第18页 / 共19页
操作系统实验文件管理代码.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统实验文件管理代码.docx

《操作系统实验文件管理代码.docx》由会员分享,可在线阅读,更多相关《操作系统实验文件管理代码.docx(19页珍藏版)》请在冰点文库上搜索。

操作系统实验文件管理代码.docx

操作系统实验文件管理代码

#include<>

#include<>

#include<>

#include<>

#include

usingnamespacestd;

#defineBLKSIZE512.\n");

printf("WARNING:

ALLDATAONTHISFILESYSTEMWILLBELOST!

\n");

printf("ProceedwithFormat(Y/N)");

scanf("%c",&choice);

getchar();

if((choice=='y')||(choice=='Y'))

{

if((fp=fopen(image_name,"w+b"))==NULL)

{

printf("Can'tcreatefile%s\n",image_name);

exit(-1);

}

for(i=0;i

fputc('0',fp);

=0;

strcpy,"/");

='d';

strcpy,"/");

=0;

=0;

[0]=-1;

[1]=-1;

fwrite(&inode,sizeof(Inode),1,fp);

=-1;

for(i=0;i<31;i++)

fwrite(&inode,sizeof(Inode),1,fp);

for(i=0;i

fputc('\0',fp);

fclose(fp);

n",file_name);

printf("Thisfilesystemnotexist,itwillbecreate!

\n");

format();

login();

}

while(!

feof(fp))

{

fread(&user,sizeof(User),1,fp);

n");

flag=1;

fclose(fp);

break;

}

}

if(flag==0)break;

}while(flag);

n",image_name);

exit(-1);

}

num=-1;

}

n");

exit(-1);

}

bitmap[i]='1';

if((fp=fopen(image_name,"r+b"))==NULL)

{

printf("Can'topenfile%s\n",image_name);

exit(-1);

}

fseek(fp,i,SEEK_SET);

fputc('1',fp);

fclose(fp);

returni;

}

ength;

add0=inode_array[num].address[0];

if(len>512)

add1=inode_array[num].address[1];

if((fp=fopen(image_name,"r+b"))==NULL)

{

printf("Can'topenfile%s.\n",image_name);

exit(-1);

}

fseek(fp,BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE,SEEK_SET);

ch=fgetc(fp);

for(i=0;(i

='\0')&&(i<512);i++)

{

temp[i]=ch;

ch=fgetc(fp);

}

if(i>=512)

{

fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE,SEEK_SET);

ch=fgetc(fp);

for(;(i

='\0');i++)

{

temp[i]=ch;

ch=fgetc(fp);

}

}

temp[i]='\0';

fclose(fp);

}

ddress[0];

len=inode_array[num].length;

if((fp=fopen(image_name,"r+b"))==NULL)

{

printf("Can'topenfile%s.\n",image_name);

exit(-1);

}

fseek(fp,BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE,SEEK_SET);

for(i=0;(i

='\0')&&(i<512);i++)

fputc(temp[i],fp);

if(i==512)

{

add1=inode_array[num].address[1];

fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE,SEEK_SET);

for(;(i

='\0');i++)

fputc(temp[i],fp);

}

fputc('\0',fp);

fclose(fp);

}

num==0)

strcpy(path,;

else

{

strcpy(path,;

m=0;

n=inum_cur;

while(m!

=inum_cur)

{

while(inode_array[n].iparent!

=m)

{

n=inode_array[n].iparent;

}

strcat(path,"/");

strcat(path,inode_array[n].file_name);

m=n;

n=inum_cur;

}

}

printf("[%s]$",path);

}

或者cddir1)

voidcd(void)

{

inti;

if(argc!

=2)

{

printf("Commandcdmusthavetwoargs.\n");

return;

}

if(!

strcmp(argv[1],".."))

inum_cur=inode_array[inum_cur].iparent;

else

{

for(i=0;i

if((inode_array[i].inum>0)&&

(inode_array[i].type=='d')&&

(inode_array[i].iparent==inum_cur)&&

!

strcmp(inode_array[i].file_name,argv[1])&&

!

strcmp(inode_array[i].user_name,)

break;

if(i==INODENUM)

printf("Thisdirectoryisn'texsited.\n");

else

inum_cur=i;

}

}

\n");

return;

}

num>0)&&

(inode_array[i].iparent==inum_cur)&&

!

strcmp(inode_array[i].user_name,)

{

if(inode_array[i].type=='d')

{

dcount++;

printf("%-20s

\n",inode_array[i].file_name);

}

else

{

fcount++;

bcount+=inode_array[i].length;

printf("%-20s%12dbytes\n",inode_array[i].file_name,inode_array[i].length);

}

}

printf("\n%dfile(s)%11dbytes\n",fcount,bcount);

printf("%ddir(s)%11dbytesFreeSpace\n",dcount,1024*1024-bcount);

}

\n");

return;

}

num<0)break;

if(i==INODENUM)

{

printf("Inodeisfull.\n");

exit(-1);

}

inode_array[i].inum=i;

strcpy(inode_array[i].file_name,argv[1]);

inode_array[i].type='d';

strcpy(inode_array[i].user_name,;

inode_array[i].iparent=inum_cur;

inode_array[i].length=0;

save_inode(i);

}

\n");

return;

}

for(i=0;i

{

if((inode_array[i].inum>0)&&

(inode_array[i].type=='f')&&

!

strcmp(inode_array[i].file_name,argv[1]))

{

printf("Thisfileisexsit.\n");

return;

}

}

for(i=0;i

if(inode_array[i].inum<0)break;

if(i==INODENUM)

{

printf("Inodeisfull.\n");

exit(-1);

}

inode_array[i].inum=i;

strcpy(inode_array[i].file_name,argv[1]);

inode_array[i].type='f';

strcpy(inode_array[i].user_name,;

inode_array[i].iparent=inum_cur;

inode_array[i].length=0;

save_inode(i);

}

\n");

return;

}

for(i=0;i

if((inode_array[i].inum>0)&&

(inode_array[i].type=='f')&&

!

strcmp(inode_array[i].file_name,argv[1])&&

!

strcmp(inode_array[i].user_name,)

break;

if(i==INODENUM)

{

printf("Thefileyouwanttoopendoesn'texsited.\n");

return;

}

inum=i;

printf("Pleaseinputopenmode:

(1:

read,2:

write,3:

readandwrite):

");

scanf("%d",&mode);

getchar();

if((mode<1)||(mode>3))

{

printf("Openmodeiswrong.\n");

return;

}

for(i=0;i

if(file_array[i].inum<0)break;

if(i==FILENUM)

{

printf("Thefiletableisfull,pleaseclosesomefile.\n");

return;

}

filenum=i;

file_array[filenum].inum=inum;

strcpy(file_array[filenum].file_name,inode_array[inum].file_name);

file_array[filenum].mode=mode;

printf("Openfile%sby",file_array[filenum].file_name);

if(mode==1)printf("readonly.\n");

elseif(mode==2)printf("writeonly.\n");

elseprintf("readandwrite.\n");

}

\n");

return;

}

for(i=0;i

if((file_array[i].inum>0)&&

!

strcmp(file_array[i].file_name,argv[1]))

break;

if(i==FILENUM)

{

printf("Open%sfirst.\n",argv[1]);

return;

}

elseif(file_array[i].mode==2)

{

printf("Can'tread%s.\n",argv[1]);

return;

}

inum=file_array[i].inum;

printf("Thelengthof%s:

%d.\n",argv[1],inode_array[inum].length);

if(inode_array[inum].length>0)

{

read_blk(inum);

for(i=0;(i

='\0');i++)

printf("%c",temp[i]);

}

}

\n");

return;

}

for(i=0;i

if((file_array[i].inum>0)&&

!

strcmp(file_array[i].file_name,argv[1]))break;

if(i==FILENUM)

{

printf("Open%sfirst.\n",argv[1]);

return;

}

elseif(file_array[i].mode==1)

{

printf("Can'twrite%s.\n",argv[1]);

return;

}

inum=file_array[i].inum;

printf("Thelengthof%s:

%d\n",inode_array[inum].file_name,inode_array[inum].length);

if(inode_array[inum].length==0)

{

i=0;

inode_array[inum].address[0]=get_blknum();

printf("Inputthedata(CTRL+Ztoend):

\n");

while(i<1023&&(temp[i]=getchar())!

=EOF)i++;

temp[i]='\0';

length=strlen(temp)+1;

inode_array[inum].length=length;

if(length>512)

inode_array[inum].address[1]=get_blknum();

save_inode(inum);

write_blk(inum);

}

else

printf("Thisfilecan'tbewritten.\n");

}

\n");

return;

}

for(i=0;i

if((file_array[i].inum>0)&&

!

strcmp(file_array[i].file_name,argv[1]))break;

if(i==FILENUM)

{

printf("Thisfiledoesn'tbeopened.\n");

return;

}

else

{

file_array[i].inum=-1;

printf("Close%ssuccess!

\n",argv[1]);

}

}

num=-1;

if(inode_array[i].length>0)

{

release_blk(inode_array[i].address[0]);

if(inode_array[i].length>=512)

release_blk(inode_array[i].address[1]);

}

save_inode(i);

}

\n");

return;

}

intn,t,i;

stackistk;

for(i=0;i=0)&&

(inode_array[i].iparent==inum_cur)&&

(!

strcmp(inode_array[i].file_name,argv[1]))&&

(!

strcmp(inode_array[i].user_name,))

{

n=inode_array[i].inum;

break;

}

if(i==INODENUM)puts("DirectoryERROR");

else

{

(n);

while(!

())

{

t=();

();

del(t);

for(i=0;i

if((inode_array[i].inum>=0)&&(inode_array[i].iparent==t))

(i);

}

}

}

//功能:

退出当前用户(logout)

voidlogout()

{

printf("Doyouwanttoexitthisuser(y/n)");

scanf("%c",&choice);

getchar();

if((choice=='y')||(choice=='Y'))

{

printf("\nCurrentuserhasexited!

\n");

login();

}

return;

}

//功能:

退出文件系统(quit)

voidquit()

{

printf("Doyouwanttoexist(y/n):

");

scanf("%c",&choice);

getchar();

if((choice=='y')||(choice=='Y'))

exit(0);

}

//功能:

显示错误

voiderrcmd()

{

printf("CommandError!

!

!

\n");

}

//清空内存中存在的用户名

voidfree_user()

{

inti;

for(i=0;i<10;i++)

[i]='\0';

}

//功能:

循环执行用户输入的命令,直到logout

//"help","cd","dir","mkdir","creat","open","read","write","close","delete","logout","clear","format","quit"

voidcommand(void)

{

charcmd[100];

system("cls");

do

{

pathset();

gets(cmd);

switch(analyse(cmd))

{

case0:

help();break;

case1:

cd();break;

case2:

dir();break;

case3:

mkdir();break;

case4:

create();break;

case5:

open();break;

case6:

read();break;

case7:

write();break;

case8:

close();break;

case9:

delet();break;

case10:

logout();break;

case11:

system("cls");break;

case12:

format();

init();

free_user();

login();break;

case13:

quit();break;

case14:

errcmd();break;

default:

break;

}

}while

(1);

}

//主函数

intmain(void)

{

login();

init();

command();

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2