📄 dir.c~
字号:
#define MAIN#include "structure.h"// function mkdir()u16 mkdir(u8 *path,u8 *name){ u16 newi,block,parent_inode_num,offset; struct ext2_inode parent_inode,inode; tag='2'; 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("dir already exist\n"); return 0; } if(!(newi=create_dir_entry(&parent_inode,name))) { printf("cannot make a dir!\n"); return 0; } update_inode_entry(&parent_inode,parent_inode_num); load_inode_entry(&inode,newi); init_dir(&inode,newi,parent_inode_num); update_inode_entry(&inode,newi); return 1;}//function rmdir()u16 rmdir(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("name not exist\n"); return 0; } load_block_entry(buffer,block); oldi=buffer[offset]+buffer[offset+1]*0x100; load_inode_entry(&inode,oldi); if(!(empty_dir(&inode))) { printf("you can not delete a directory when it is not empty !\n"); return 0; } free_blocks(&inode); free_inode(oldi); buffer[offset]=buffer[offset+1]=0; update_block_entry(buffer,block); return 1;}// function dir()void dir_block(u16 block){ u8 buffer[512]; struct ext2_dir_entry *de; u16 i; if(!block) return; load_block_entry(buffer,block); for(i=0,de=(struct ext2_dir_entry *)buffer;i<DIR_ENTRIES_PER_BLOCK;i++,de++){ if(de->d_inode) { if(de->d_file_type=='1') { printf("f------rwx "); } else { printf("d------rwx "); } printf("%s\n",de->name); } }}void dir_ind(u16 block){ u8 buffer[512]; u16 i; if(!block) return; load_block_entry(buffer,block); for(i=0;i<256;i++) dir_block(buffer[2*i]+buffer[2*i+1]*0x100);}void dir_dind(u16 block){ u8 buffer[512]; u16 i; if(!block) return; load_block_entry(buffer,block); for(i=0;i<256;i++) dir_ind(buffer[2*i]+buffer[2*i+1]*0x100);}void dir( ){ struct ext2_inode inode; load_inode_entry(&inode,current_dir); if(!(test_inode(current_dir))) { printf("the dir not exist!!\n"); return; } u16 i; for(i=0;i<6;i++) dir_block(inode.i_block[i]); dir_ind(inode.i_block[6]); dir_dind(inode.i_block[7]);}//function cd()u16 cd(u8 *path){ u16 inode_num; u8 ch; if((!strlen(path))){ printf("miss parameter\n"); return 0; } if(!(inode_num=get_dir(path))){ printf("wrong dir\n"); return 0; } current_dir=inode_num; if((ch=*path)=='/'){ strcpy(current_path,path); } else if(ch) strcat(current_path,path); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -