⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel function.cpp

📁 模拟Linux文件系统 在任一OS下
💻 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 + -