📄 dirgett.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 + -