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

📄 block.c~

📁 模拟linux的ext3文件系统。采用位图法。用一个文件模拟硬盘。实现创建、删除目录、文件。读、写文件
💻 C~
字号:
#include"structure.h"int load_block_entry(u8 *buffer, u16 block_num){ u32 block_addr; block_addr=DATA_BLOCK+block_num*512; fseek(FS,block_addr,SEEK_SET); fread(buffer,sizeof(u8),512,FS); return 1;}int update_block_entry(u8 *buffer,u16 block_num){ u32 block_addr; block_addr=DATA_BLOCK+block_num*512; fseek(FS,block_addr,SEEK_SET); fwrite(buffer,sizeof(u8),512,FS); fclose(FS); FS=fopen("FS","r+"); return 1;}int pow(int x,int y){ int i; int ret=1; for (i=0; i<y;i++)     ret=ret*x; return ret;}u16 new_block(){ u16 ret; u8 i,j; u8 a,b; u8 buffer[512]; fseek(FS,BLOCK_BITMAP,SEEK_SET); fread(buffer,sizeof(u8),512,FS); b=0; for(i=0;i<512;i++){	a=b^buffer[i];	if(a!=0xff)  break;	} if(i==512)   ret=0; else{        for(j=0;j<8;j++){ 		a=pow(2,(7-j));	        b=a|buffer[i]; 	        if(b!=buffer[i]) break;	 }	 buffer[i]=b;	 fseek(FS,BLOCK_BITMAP,SEEK_SET);	 fwrite(buffer,sizeof(u8),512,FS);         fclose(FS);         FS=fopen("FS","r+");         ret=i*8+j; }	  return ret;}void free_block(u16 inode_num){ u8 i,j,temp; u8 buffer[512]; fseek(FS,BLOCK_BITMAP,SEEK_SET); fread(buffer,sizeof(u8),512,FS); i=inode_num/8; j=inode_num%8; temp=pow(2,(7-j)); buffer[i]=temp^buffer[i]; fseek(FS,BLOCK_BITMAP,SEEK_SET); fwrite(buffer,sizeof(u8),512,FS); fclose(FS); FS=fopen("FS","r+");}u16 test_block(u16 block){ u8 i,j,a,b; u8 buffer[512]; fseek(FS,BLOCK_BITMAP,SEEK_SET); fread(buffer,sizeof(u8),512,FS); i=block/8; j=block%8; a=pow(2,(7-j)); b=a|buffer[i]; if(b!=buffer[i])  return 0; return 1;}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -