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

📄 init.c~

📁 模拟linux的ext3文件系统。采用位图法。用一个文件模拟硬盘。实现创建、删除目录、文件。读、写文件
💻 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 + -