📄 kernel function.cpp
字号:
#include"disk.h"
extern disk DISK;
void kernel_createfolder(servicehandle sh,
char *filename
)
{
folder fd(DISK.iof,*(sh->pinode));
if(fd.folder_findbyname(filename)!=-1){
cout<<"the folder is already exist"<<endl;
return;
}
freebitmap fb(DISK.iof);
int k=fb.freebitmap_applyfor();
fb.freebitmap_set(k);
inodelist_disk ild(DISK.iof);
int j=ild.inodelist_disk_applyfor();
inode itemp;
itemp.inode_ini();
itemp.address[0]=k;
itemp.file_size=2;
itemp.inode_num=j;
itemp.extend3=0;
itemp.extend4=0;
itemp.type=MYFOLDER;
ild.inodelist_disk_write(j,itemp);//根据inode号写表
folder ftemp(DISK.iof,itemp);
ftemp.folder_makedir();
int w=fd.folder_applyfor();
folderitem fitemp;
strcpy(fitemp.filename,filename);
fitemp.inodenum=j;
fd.folder_write(w,&fitemp);
fd.folder_inodewriteback();
////////内存与硬盘inode同步
ild.inodelist_disk_read(fd.folderinode.inode_num,sh->pinode);//根据inode号读inode
}
void kernel_folderbrowse(servicehandle sh)//根据服务句柄浏览文件夹
{
folder ftemp(DISK.iof,*sh->pinode);
ftemp.folder_browse();
}
void kernel_folderdeleteitem(servicehandle sh,char*name)
{
folder ftemp(DISK.iof,*sh->pinode);
int k=ftemp.folder_findbyname(name);//读取要删除的项的项号
if(k==-1){
cout<<"there is no such a folderitem"<<endl;
return;
}
folderitem fftemp;
ftemp.folder_read(k,&fftemp);
inodelist_disk ild(DISK.iof);
inode itemp;
int num=fftemp.inodenum;
ild.inodelist_disk_read(num,&itemp);
freebitmap fd(DISK.iof);
if(itemp.file_size==2&&itemp.type==MYFOLDER){
fd.freebitmap_clear(itemp.address[0]);
itemp.inode_clear();
ild.inodelist_disk_write(num,itemp);
ftemp.folder_deletebyname(name);
////////内存与硬盘inode同步
ild.inodelist_disk_read(ftemp.folderinode.inode_num,sh->pinode);//根据inode号读inode
return;
}
cout<<"the folder you want to delete is not empty"<<endl;
}
void kernel_createfile(servicehandle sh,char*filename)
{
folder fd(DISK.iof,*(sh->pinode));
if(fd.folder_findbyname(filename)!=-1){
cout<<"the file is already exist"<<endl;
return;
}
freebitmap fb(DISK.iof);
int k=fb.freebitmap_applyfor();
fb.freebitmap_set(k);
inodelist_disk ild(DISK.iof);
int j=ild.inodelist_disk_applyfor();
inode itemp;
itemp.inode_ini();
itemp.address[0]=k;
itemp.inode_num=j;
itemp.type=MYTEXT;
ild.inodelist_disk_write(j,itemp);//根据inode号写表
fileimage fftemp;
fftemp.fileimage_open(DISK.iof,itemp);
fftemp.fileimage_getimage_text(filename);
int w=fd.folder_applyfor();
folderitem fitemp;
strcpy(fitemp.filename,filename);
fitemp.inodenum=j;
fd.folder_write(w,&fitemp);
fd.folder_inodewriteback();
////////内存与硬盘inode同步
ild.inodelist_disk_read(fd.folderinode.inode_num,sh->pinode);//根据inode号读inode
}
void kernel_filecat_text(servicehandle sh){
fileimage ff;
ff.fileimage_open(DISK.iof,*sh->pinode);
ff.fileimage_cat_text();
}
void kernel_folderdeletefile(servicehandle sh,char*name){
folder ftemp(DISK.iof,*sh->pinode);
int k=ftemp.folder_findbyname(name);//读取要删除的项的项号
if(k==-1){
cout<<"there is no such a folderitem"<<endl;
return;
}
folderitem fftemp;
ftemp.folder_read(k,&fftemp);
inodelist_disk ild(DISK.iof);
inode itemp;
int num=fftemp.inodenum;
ild.inodelist_disk_read(num,&itemp);
freebitmap fd(DISK.iof);
if(itemp.type!=MYFOLDER){
for(int i=0;i<10;i++)
if(itemp.address[i]!=-1)
fd.freebitmap_clear(itemp.address[i]);
itemp.inode_clear();
ild.inodelist_disk_write(num,itemp);
ftemp.folder_deletebyname(name);
////////内存与硬盘inode同步
ild.inodelist_disk_read(ftemp.folderinode.inode_num,sh->pinode);//根据inode号读inode
return;
}
cout<<"what you want to delete is a folder but not a file"<<endl;
}
void kernel_fileoutcopy(servicehandle sh,char*image){
fileimage ff;
ff.fileimage_open(DISK.iof,*sh->pinode);
ff.fileimage_outimage_text(image);
}
int kernel_foldercd(servicehandle sh,char*name)
{
folder ftemp(DISK.iof,*sh->pinode);
int k=ftemp.folder_findbyname(name);//读取要打开的项的项号
if(k==-1){
cout<<"there is no such a folderitem"<<endl;
return -1;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -