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

📄 dir.h

📁 Linux 的最重要的特徵之一是它的为许多不同的文件系统的支持。这使其非常灵活从而与许多另外的操作系统可以很好的共存。linux采用的是树型结构。最上层是根目录
💻 H
字号:

_dir()
{
	unsigned int di_mode;
	int i,j,one;
	struct inode *temp_inode;

	printf("CURRENT DIRECTORY:\n");
	for(i=0;i<dir.size;i++)
	{
		if(dir.direct[i].d_ino!=DIEMPTY)
		{
			printf("%sDIRSIZ",dir.direct[i].d_name);
			temp_inode=iget(dir.direct[i].d_ino);
			di_mode=temp_inode->di_mode;
			for(j=0;j<9;j++)
			{
				one=di_mode%2;
				di_mode=di_mode/2;

				if(one) printf("x");
				else printf("-");
			}
			if(temp_inode->di_mode&&DIFILE==1)
			{
				printf("%ld\n",temp_inode->di_size);
				printf("block chain:");
				for(i=0;i<temp_inode->di_size/BLOCKSIZ+1;i++)
				printf("%4d",temp_inode->di_addr[i]);
				printf("\n");
			}
			else printf("<dir>\n");
			iput(temp_inode);
		}
	}
}

mkdir(char *dirname)
{
	int dirid,dirpos;
	struct inode *inode;
	struct direct buf[BLOCKSIZ/(DIRSIZ+2)];
	unsigned int block;

	
	dirid=namei(dirname);
	if(dirid!=-1)//dirid==-1表示没有该目录名存在;
	{
		inode=iget(dirid);
		if(inode->di_mode&DIDIR)
			printf("\n%s directory already existed!!\n");
		else
			printf("\n%s is a file name&can not creat a dir the same name",dirname);
		iput(inode);
		return 0;
	}

	dirpos=iname(dirname);
	inode=ialloc();
	inode->i_ino=dirpos;
	dir.direct[dirpos].d_ino=inode->i_ino;
	dir.size++;

	strcpy(buf[0].d_name,".");
	buf[0].d_ino=dirid;
	strcpy(buf[1].d_name,"..");
	buf[1].d_ino=cur_path_inode->i_ino;

	block=balloc();
	fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET);
	fwrite(buf,1,BLOCKSIZ,fd);

	inode->di_size=2*(DIRSIZ+2);
	inode->di_number=1;
	inode->di_mode=user[user_id].u_default_mode;
	
	inode->di_uid=user[user_id].u_uid;
	inode->di_gid=user[user_id].u_gid;
	inode->di_addr[0]=block;

	iput(inode);
	return 0;
}

chdir(char *dirname)
{
	int dirid;
	int temp;
	struct inode *inode;
	short block;
	int i,j,low=0,high=0;
	dirid=namei(dirname);
	if(dirid==-1)
	{
		printf("\n%s does not existed\n",dirname);
		return 0;
	}
	inode=iget(dirid);
	if(!access(user_id,inode,user[user_id].u_default_mode))
	{
		printf("\nhas not access to the directory %s",dirname);
		iput(inode);
		return 0;
	}

	for(i=0;i<dir.size;i++)
	{
		for(j=0;j<DIRNUM;j++)
		{
			temp=dir.direct[j].d_ino;

			if(dir.direct[j].d_ino==0||dir.direct[j].d_ino>MAX) break;
		}
		dir.direct[j].d_ino=0;
	}

	for(i=0;i<cur_path_inode->di_size/BLOCKSIZ+1;i++)
	{
		bfree(cur_path_inode->di_addr[i]);
	}
	i=dir.size;
	for(i=0;i<dir.size;i+=BLOCKSIZ/(DIRSIZ+2))
	{
		block=balloc();
		cur_path_inode->di_addr[i]=block;
		fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET);
		fwrite(&dir.direct[i],1,BLOCKSIZ,fd);
	}
	cur_path_inode->di_size=dir.size*(DIRSIZ+2);
	iput(cur_path_inode);

	cur_path_inode=inode;
	
	i=inode->di_size/BLOCKSIZ+1;
	j=0;
	for(i=0;i<inode->di_size/BLOCKSIZ+1;i++)
	{
		fseek(fd,DATASTART+inode->di_addr[i]*BLOCKSIZ,SEEK_SET);
		fread(&dir.direct[j],1,BLOCKSIZ,fd);
		j+=BLOCKSIZ/(DIRSIZ+2);
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -