操作系统实验文件管理C代码Word文档格式.docx
《操作系统实验文件管理C代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验文件管理C代码Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
i++)
fputc('
0'
fp);
=0;
strcpy,"
/"
='
d'
;
[0]=-1;
[1]=-1;
fwrite(&
inode,sizeof(Inode),1,fp);
=-1;
31;
BLKNUM*BLKSIZE;
\0'
fclose(fp);
n"
file_name);
Thisfilesystemnotexist,itwillbecreate!
format();
login();
while(!
feof(fp))
fread(&
user,sizeof(User),1,fp);
flag=1;
break;
if(flag==0)break;
}while(flag);
num=-1;
}
n"
bitmap[i]='
1'
r+b"
topenfile%s\n"
fseek(fp,i,SEEK_SET);
returni;
ength;
add0=inode_array[num].address[0];
if(len>
512)
add1=inode_array[num].address[1];
if((fp=fopen(image_name,"
topenfile%s.\n"
fseek(fp,BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE,SEEK_SET);
ch=fgetc(fp);
for(i=0;
(i<
len)&
&
(ch!
='
)&
512);
temp[i]=ch;
if(i>
=512)
fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE,SEEK_SET);
for(;
temp[i]='
ddress[0];
len=inode_array[num].length;
fseek(fp,BLKSIZE+INODESIZE*INODENUM+add0*BLKSIZE,SEEK_SET);
(i<
len)&
(temp[i]!
='
)&
(i<
fputc(temp[i],fp);
if(i==512)
fseek(fp,BLKSIZE+INODESIZE*INODENUM+add1*BLKSIZE,SEEK_SET);
(temp[i]!
num==0)
strcpy(path,;
else
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;
[%s]$"
path);
或者cddir1)
voidcd(void)
{
inti;
if(argc!
=2)
Commandcdmusthavetwoargs.\n"
return;
if(!
strcmp(argv[1],"
.."
inum_cur=inode_array[inum_cur].iparent;
INODENUM;
if((inode_array[i].inum>
0)&
(inode_array[i].type=='
(inode_array[i].iparent==inum_cur)&
!
strcmp(inode_array[i].file_name,argv[1])&
strcmp(inode_array[i].user_name,)
if(i==INODENUM)
Thisdirectoryisn'
texsited.\n"
else
inum_cur=i;
num>
0)&
(inode_array[i].iparent==inum_cur)&
!
if(inode_array[i].type=='
)
dcount++;
%-20s<
DIR>
inode_array[i].file_name);
else
fcount++;
bcount+=inode_array[i].length;
%-20s%12dbytes\n"
inode_array[i].file_name,inode_array[i].length);
\n%dfile(s)%11dbytes\n"
fcount,bcount);
%ddir(s)%11dbytesFreeSpace\n"
dcount,1024*1024-bcount);
num<
0)break;
if(i==INODENUM)
Inodeisfull.\n"
inode_array[i].inum=i;
strcpy(inode_array[i].file_name,argv[1]);
inode_array[i].type='
strcpy(inode_array[i].user_name,;
inode_array[i].iparent=inum_cur;
inode_array[i].length=0;
save_inode(i);
if((inode_array[i].inum>
(inode_array[i].type=='
f'
strcmp(inode_array[i].file_name,argv[1]))
Thisfileisexsit.\n"
if(inode_array[i].inum<
strcpy(inode_array[i].user_name,;
Thefileyouwanttoopendoesn'
inum=i;
Pleaseinputopenmode:
(1:
read,2:
write,3:
readandwrite):
%d"
mode);
if((mode<
1)||(mode>
3))
Openmodeiswrong.\n"
return;
FILENUM;
if(file_array[i].inum<
if(i==FILENUM)
Thefiletableisfull,pleaseclosesomefile.\n"
filenum=i;
file_array[filenum].inum=inum;
strcpy(file_array[filenum].file_name,inode_array[inum].file_name);
file_array[filenum].mode=mode;
Openfile%sby"
file_array[filenum].file_name);
if(mode==1)printf("
readonly.\n"
elseif(mode==2)printf("
writeonly.\n"
elseprintf("
readandwrite.\n"
if((file_array[i].inum>
strcmp(file_array[i].file_name,argv[1]))
if(i==FILENUM)
Open%sfirst.\n"
argv[1]);
elseif(file_array[i].mode==2)
tread%s.\n"
inum=file_array[i].inum;
Thelengthof%s:
%d.\n"
argv[1],inode_array[inum].length);
if(inode_array[inum].length>
0)
read_blk(inum);
inode_array[inum].length)&
temp[i]);
if((file_array[i].inum>
strcmp(file_array[i].file_name,argv[1]))break;
elseif(file_array[i].mode==1)
twrite%s.\n"
%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();
Inputthedata(CTRL+Ztoend):
while(i<
1023&
(temp[i]=getchar())!
=EOF)i++;
temp[i]='
length=strlen(temp)+1;
inode_array[inum].length=length;
if(length>
inode_array[inum].address[1]=get_blknum();
save_inode(inum);
write_blk(inum);
Thisfilecan'
tbewritten.\n"
strcmp(file_array[i].file_name,argv[1]))break;
Thisfiledoesn'
tbeopened.\n"
file_array[i].inum=-1;
Close%ssuccess!
num=-1;
if(inode_array[i].length>
release_blk(inode_array[i].address[0]);
release_blk(inode_array[i].address[1]);
intn,t,i;
stack<
int>
istk;
i++)num>
=0)&
(!
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"
(n);
())
t=();
();
del(t);
(inode_array[i].iparent==t))
(i);
}
}
//功能:
退出当前用户(logout)
voidlogout()
Doyouwanttoexitthisuser(y/n)?
\nCurrentuserhasexited!
退出文件系统(quit)
voidquit()
Doyouwanttoexist(y/n):
exit(0);
显示错误
voiderrcmd()
CommandError!
!
//清空内存中存在的用户名
voidfree_user()
i<
10;
i++)
[i]='
循环执行用户输入的命令,直到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();
case1:
cd();
case2:
dir();
case3:
mkdir();
case4:
create();
case5:
open();
case6:
read();
case7:
write();
case8:
close();
case9:
delet();
case10:
logout();
break;
case11:
case12:
init();
free_user();
case13:
quit();
case14:
errcmd();
default:
}while
(1);
//主函数
intmain(void)
command();
return0;