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 + -
显示快捷键?