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

📄 dirgett.c

📁 设计并实现一个多用户多级目录结构的文件系统
💻 C
字号:
/************************************************/
/*												*/
/*					dirgetput.c					*/	
/*												*/
/************************************************/

#include <stdio.h>
#include "filsys.h"

getdir( unsigned int dinodeid, char * dirname )
{
	int i;

	cur_path_inode = iget( dinodeid );
	/* 该文件为普通文件而非目录文件 */
	if( cur_path_inode->i_mode & DIREG )
	{
		printf( "bash: %s: Not a directory\n", dirname );
		iput( cur_path_inode );
		return;
	}
	/* 该用户没有相应的权限,不能进入 */
	if( !access( cur_path_inode)
		&& dinodeid != ROOTDIR )
	{
		printf( "bash: %s: Permission denied\n", dirname );
		iput( cur_path_inode );
		return;
	}
	dir.size = cur_path_inode->i_size / DIRECTSIZ;
	for( i = 0; i < DIRNUM; i++ )
	{
		strcpy( dir.direct[i].d_name, " " );
		dir.direct[i].d_ino = DIEMPTY;
	}
	for( i = 0; i < dir.size / ( BLOCKSIZ / DIRECTSIZ ); i++ )
	{
		fseek( fd, DATASTART + BLOCKSIZ * cur_path_inode->i_addr[i], SEEK_SET );
		fread( &dir.direct[( BLOCKSIZ / DIRECTSIZ ) * i], 1, BLOCKSIZ, fd );
	}
	fseek( fd, DATASTART + BLOCKSIZ * cur_path_inode->i_addr[i], SEEK_SET );
	fread( &dir.direct[( BLOCKSIZ / DIRECTSIZ ) * i], 1,
		cur_path_inode->i_size % BLOCKSIZ, fd );
	return;
}

putdir()
{
	unsigned int block;
	int i;
/*
	cur_path_inode->i_size = dir.size * DIRECTSIZ;
	for( i = 0; i < dir.size / ( BLOCKSIZ / DIRECTSIZ ); i++ )
	{
		fseek( fd, DATASTART + BLOCKSIZ * cur_path_inode->i_addr[i], SEEK_SET );
		fwrite( &dir.direct[( BLOCKSIZ / DIRECTSIZ ) * i], 1, BLOCKSIZ, fd );
	}
	fseek( fd, DATASTART + BLOCKSIZ * cur_path_inode->i_addr[i], SEEK_SET );
	fwrite( &dir.direct[( BLOCKSIZ / DIRECTSIZ ) * i], 1,
		cur_path_inode->i_size % BLOCKSIZ, fd );
	iput( cur_path_inode );
*/


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

}

⌨️ 快捷键说明

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