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

📄 file.c~

📁 模拟linux的ext3文件系统。采用位图法。用一个文件模拟硬盘。实现创建、删除目录、文件。读、写文件
💻 C~
字号:
#define MAIN#include "structure.h"//function create()u16 create(u8 *path,u8 *name){ u16 block,parent_inode_num,inode_num,offset; struct ext2_inode parent_inode; tag='1'; if((strlen(path))){      if(!(parent_inode_num=get_dir(path))) {             printf("invalid pathname!\n");             return 0;      } } else parent_inode_num=current_dir; if(!(strlen(name))){        printf("miss parameter!\n");        return 0; } load_inode_entry(&parent_inode,parent_inode_num); if((block=search_name(&parent_inode,name,&offset)))    {          printf("file already exist\n");          return 0; } if(!(inode_num=create_dir_entry(&parent_inode,name))){          printf("cannot create file\n");          return 0; } return 1;}//function delete()u16 delete(u8 *path,u8 *name){ u16 oldi,block,parent_inode_num,offset; struct ext2_inode parent_inode,inode; u8 buffer[512]; if((strlen(path))){      if(!(parent_inode_num=get_dir(path))) {             printf("invalid pathname!\n");             return 0;      } } else parent_inode_num=current_dir; if(!(strlen(name))){        printf("miss parameter\n");        return 0; }  load_inode_entry(&parent_inode,parent_inode_num); if(!(block=search_name(&parent_inode,name,&offset))){ 	 printf("The file is not existing!\n");	 return 0; } load_block_entry(buffer,block); oldi=buffer[offset]+buffer[offset+1]*0x100; load_inode_entry(&inode,oldi); free_blocks(&inode); free_inode(oldi); buffer[offset]=buffer[offset+1]=0; update_block_entry(buffer,block); return 1;}//function open()u16* open(u8 *path,u8 *name){ u16 block,i; u16 inode_num,parent_inode_num; u16 offset; u8 buffer[512]; struct ext2_inode parent_inode; if((strlen(path))){      if(!(parent_inode_num=get_dir(path))) {             printf("wrong pathname!\n");             return 0;      } } else parent_inode_num=current_dir; if(!(strlen(name))){        printf("miss parameter\n");        return 0; } load_inode_entry(&parent_inode,parent_inode_num); if(!(block=search_name(&parent_inode,name,&offset))) {	 printf("cannot open file\n");	 return 0; } load_block_entry(buffer,block); inode_num=buffer[offset]+buffer[offset+1]; for(i=0;i<MAX_OPEN_FILE;i++){         if(file_open_table[i]==0||file_open_table[i]==inode_num){                 file_open_table[i]=inode_num;                 return file_open_table+i*sizeof(u16);	 } }  return NULL;}//function close()void close(u16 *fd){ *fd=0; }//function  read()u16 read(u16 *fd){ u16 inode_num; struct ext2_inode inode; if(!fd) {	 printf("You must open file before operation!\n");	 return 0; } inode_num=*fd; load_inode_entry(&inode,inode_num); print(&inode); return 1;}//function write()u16 write(u16 *fd,u8 *string,u8 *string2 ){ u16 inode_num; u16 start=0; strcat(string,string2); u16 end=strlen(string); struct ext2_inode inode; if(!fd) {	 printf("You must open file before operation!\n");	 return 0; } inode_num=*fd; load_inode_entry(&inode,inode_num); free_blocks(&inode); store(&inode,string,&start,&end); update_inode_entry(&inode,inode_num); return 1;}

⌨️ 快捷键说明

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