📄 init.c~
字号:
#define MAIN#include "structure.h"//function init_FS()int init_FS(){ u16 i; u8 end[32]="this is the end of FS 2.36MB"; u8 buf[512]={0,}; u8 volume_name[16]="ext2_filesystem"; u16 bg_block_bitmap[1]={1}; u16 bg_inode_bitmap[1]={2}; u16 bg_inode_table[1]={3}; u16 bg_free_blocks_count[1]={4094}; //number 0 is reserved;the root dir used one block and one inode u16 bg_free_inodes_count[1]={4094}; u16 bg_used_dirs_count[1]={2}; //dirs . and .. u8 bitmap=0xC0; u16 i_mode[1]={0x26}; u16 i_blocks[1]={1}; u32 i_size[1]={20}; u32 i_atime[1]={0}; u32 i_ctime[1]={0}; u32 i_mtime[1]={0}; u32 i_dtime[1]={0}; u16 i_block[1]={1}; u16 d1_inode[1]={1}; u16 d1_length[1]={8}; u8 d1_name_len[1]={1}; u8 d1_filetype[1]={2}; u8 d1_name[EXT2_NAME_LEN]; u16 d2_inode[1]={1}; u16 d2_length[1]={12}; u8 d2_name_len[1]={2}; u8 d2_filetype[1]={2}; u8 d2_name[EXT2_NAME_LEN]; for(i=0;i<EXT2_NAME_LEN;i++){ d1_name[i]=0; d2_name[i]=0; } strcpy(d1_name,"."); strcpy(d2_name,".."); //create hard FS and initialize it FS=fopen("FS","r+t"); if(FS==NULL) FS=fopen("FS","w+"); fseek(FS,0,SEEK_SET); for(i=0;i<512;i++) buf[i]=0; for(i=0;i<4611;i++) fwrite(buf,sizeof(u8),512,FS); fwrite(end,sizeof(u8),32,FS); //init group_desc fseek(FS,0,SEEK_SET); fwrite(volume_name,sizeof(u8),16,FS); fwrite(bg_block_bitmap,sizeof(u16),1,FS); fwrite(bg_inode_bitmap,sizeof(u16),1,FS); fwrite(bg_inode_table,sizeof(u16),1,FS); fwrite(bg_free_blocks_count,sizeof(u16),1,FS); fwrite(bg_free_inodes_count,sizeof(u16),1,FS); fwrite(bg_used_dirs_count,sizeof(u16),1,FS); //init block_bitmap fseek(FS,BLOCK_BITMAP,SEEK_SET); fprintf(FS,"%c",bitmap); //init inode_bitmap fseek(FS,INODE_BITMAP,SEEK_SET); fprintf(FS,"%c",bitmap); //init inode_table fseek(FS,INODE_TABLE,SEEK_SET); fprintf(FS,"inode_table start from here \n"); fseek(FS,INODE_TABLE+64,SEEK_SET); fwrite(i_mode,sizeof(u16),1,FS); fwrite(i_blocks,sizeof(u16),1,FS); fwrite(i_size,sizeof(u32),1,FS); fwrite(i_atime,sizeof(u32),1,FS); fwrite(i_ctime,sizeof(u32),1,FS); fwrite(i_mtime,sizeof(u32),1,FS); fwrite(i_dtime,sizeof(u32),1,FS); fwrite(i_block,sizeof(u16),1,FS); //init data_block fseek(FS,DATA_BLOCK+512,SEEK_SET); fwrite(d1_inode,sizeof(u16),1,FS); fwrite(d1_length,sizeof(u16),1,FS); fwrite(d1_name_len,sizeof(u8),1,FS); fwrite(d1_filetype,sizeof(u8),1,FS); fwrite(d1_name,sizeof(u8),d1_name_len[1],FS); //fwrite(dir_entry1,sizeof(struct ext2_dir_entry),1,FS); fseek(FS,DATA_BLOCK+512+32,SEEK_SET); //fwrite(dir_entry2,sizeof(struct ext2_dir_entry),1,FS); fwrite(d2_inode,sizeof(u16),1,FS); fwrite(d2_length,sizeof(u16),1,FS); fwrite(d2_name_len,sizeof(u8),1,FS); fwrite(d2_filetype,sizeof(u8),1,FS); fwrite(d2_name,sizeof(u8),d2_name_len[1],FS); fseek(FS,DATA_BLOCK,SEEK_SET); fprintf(FS,"data_block start from here"); fclose(FS); printf("FS has been formatted sucessfully!\n"); return 1;}//function init_memory()int init_memory(){ int i; u8 buffer[512]; for(i=0;i<MAX_OPEN_FILE;i++) file_open_table[i]=0; last_alloc_inode=0; last_alloc_block=0; current_dir=1; strcpy(current_path,"/"); FS=fopen("FS","r+"); if(FS==NULL) { printf("FS not exits or not format \n"); return 0; } fseek(FS,0,SEEK_SET); fread(buffer,sizeof(u8),512,FS); for(i=0;i<16;i++) group_desc.bg_volume_name[i]=buffer[i]; group_desc.bg_block_bitmap=buffer[16]; group_desc.bg_inode_bitmap=buffer[18]; group_desc.bg_inode_table=buffer[20]; group_desc.bg_free_blocks_count=buffer[23]*0x100+buffer[22]; group_desc.bg_free_inodes_count=buffer[25]*0x100+buffer[24]; group_desc.bg_used_dirs_count=buffer[26]; return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -