init.c
来自「设计并实现一个多用户多级目录结构的文件系统」· C语言 代码 · 共 109 行
C
109 行
/************************************************/
/* */
/* init.c */
/* */
/************************************************/
#include <stdio.h>
#include <string.h>
#include "filsys.h"
struct dir dir;
init()
{ struct filsys aaa;
int i, j;
/* 0. open the file column */
// fd = fopen( "filesystem", "r+w+b" );
// if( fd == NULL )
// {
// printf( "\nfilesys can't be loaded\n" );
// exit( 0 );
// }
/* 1. 从block 1# 中读取超级块信息 */
fseek( fd, BLOCKSIZ, SEEK_SET );
fread( &filsys, 1, sizeof( struct filsys ), fd );aaa=filsys;
/* 2. 初始化用于查找内存i节点的Hash列表 */
for( i = 0; i < NHINO; i++ )
hinode[i].i_forw = NULL;
/* 3. 初始化系统打开表 */
for( i = 0; i < SYSOPENFILE; i++ )
{
sys_ofile[i].f_count = 0;
sys_ofile[i].f_inode = NULL;
}
/* 4. 初始化用户信息 */
for( i = 0; i < USERNUM; i++ )
{
user[i].u_uid = 0;
user[i].u_gid = 0;
for( j = 0; j < NOFILE; j++ )
user[i].u_ofile[j] = SYSOPENFILE + 1;
}
/* 5. read the main directory to initialize the dir */
// cur_path_inode = iget( 2 );
// 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;
// }
getdir( ROOTDIR, "/" );
// iput( cur_path_inode );
/*
cur_path_inode = iget( 2 );
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, k = 0; i <= dir.size / ( BLOCKSIZ / DIRECTSIZ ); i++ )
{
if( i != dir.size / ( BLOCKSIZ / DIRECTSIZ ))
{
for( j = 0; j < BLOCKSIZ /DIRECTSIZ; j++, k++ )
{
fseek( fd,
DATASTART + BLOCKSIZ * cur_path_inode->i_addr[i] + DIRECTSIZ * j,
SEEK_SET );
fread( &dir.direct[k], 1, sizeof( struct direct ), fd );
}
}
else
{
temp = dir.size % ( BLOCKSIZ / DIRECTSIZ );
for( j = 0; j < temp; j++, k++ )
{
fseek( fd,
DATASTART + BLOCKSIZ * cur_path_inode->i_addr[i] + DIRECTSIZ * j,
SEEK_SET );
fread( &dir.direct[k], 1, sizeof( struct direct ), fd );
}
}
}*/
//////////////////////////////////////////////////////////////////////////////////////
/* 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);
for(i=0;i<dir.size;i++){
printf("xxxx%s %d \n ",dir.direct[i].d_name,dir.direct[i].d_ino);}*/
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?