📄 fs.c
字号:
#include "fs.h"struct BitVect * d_ibm; // disk inode bit map struct BitVect * d_dbm; // disk datablock bit map //struct DITable d_itable; // disk inode table//struct BitVect ibm; // on-mem inode bit map //struct BitVect dbm; // on-mem datablock bit map struct Inode * root; // root inode struct ITable itable; // on-mem inode tablestruct FBTable fbtable; // file block tablestruct FPTable fptable; // file ptr table/*void init_d_ibm(){ // inode 0,1 are reserved BitVect_init(d_ibm); // make all bits free first BitVect_set_bit(d_ibm,0); // inode 0 is reserved BitVect_set_bit(d_ibm,1); // inode 1 is reserved BitVect_set_bit(d_ibm,2); // inode 2 is for root dir file }void init_d_dbm(){ BitVect_init(d_dbm); // make all bits free first BitVect_set_bit(d_dbm,0); // blk 0 for bootcode BitVect_set_bit(d_dbm,1); // blk 1 for superblock BitVect_set_bit(d_dbm,2); // blk 2 for ibm BitVect_set_bit(d_dbm,3); // blk 3 for dbm BitVect_set_bit(d_dbm,4); // blk 4 for inode table BitVect_set_bit(d_dbm,5); // blk 5 for root dir }// functions for d_itablevoid init_d_itable(){// inode 0,1 is reserved. inode 2 is for root dir DITable_make_inode(2,5);}*/void print_buf(char *buf, int len){ int i; for(i=0;i<len;i++) printk("%x ", buf[i]);}void test_fs(){ int x,y; char buf[20], buf1[20]; //x=do_creat("/f1"); //printk("aft do_creat /f1\n"); //for(;;); //do_write(x, "hello", 5); //printk("aft do_write\n"); //for(;;); //y=do_open("/f1"); y=do_open("/f1"); // in ext2fs disk printk("aft do_open"); //for(;;); do_read(y,buf,5); printk("aft do_read"); //for(;;); printk("/f1 is \n"); print_buf(buf,5); for(;;); // x=do_mkdir("/d1"); // y=do_creat("/d1/f2"); // now test executable /* printk("now creating /p1\n"); x = do_creat("/p1"); // mov $0x4, %eax; write buf[0]=0xb8; buf[1]=0x04; buf[2]=0x0; buf[3]=0x0; buf[4]=0x0; // int $0x80 buf[5]=0xcd; buf[6]=0x80; // mov $0x1, %eax ; exit buf[7]=0xb8; buf[8]=0x01; buf[9]=0x0; buf[10]=0x0; buf[11]=0x0; // int $0x80 buf[12]=0xcd; buf[13]=0x80; buf[14]=0x0; // end of data do_write(x, buf, 15); */ // confirm //y=do_open("/p1"); //do_read(y,buf1,14); //printk("/p1 is: "); //for(x=0;x<14;x++) printk("%x ",buf1[x]);}// system functionsvoid init_fs(){ FPTable_init(); FBTable_init(); ITable_init(); //printk("bef format_disk"); //for(;;); //format_disk(); //printk("aft format_disk\n"); //for(;;); mount_root_fs(); // test fs printk("aft mount_root\n"); //for(;;); printk("dumping root dir file\n"); dump_directory_file(root); test_fs();}/*void format_disk(){// format disk struct DirBlock rdir; printk("formatting...to start hit anykey\n"); wait_for_anykey(); init_d_ibm(); init_d_dbm(); init_d_itable(); DirBlk_set_empty(&rdir,2,2);//make an empty directory file block WriteRelativeSector(2, (char *)d_ibm, (char *)d_ibm); WriteRelativeSector(3, (char *)d_dbm, (char *)d_dbm); WriteRelativeSector(4, (char *)&d_itable, (char *)&d_itable); WriteRelativeSector(5, (char *)&rdir, (char *)&rdir); printk("aft writing. rdir is\n"); FB_dump((char *)&rdir);}*/void mount_root_fs(){// load ibm, dbm, itable from the disk printk("insert root disk and hit any key\n"); wait_for_anykey(); d_dbm = (struct BitVect *)FBTable_get_block(3); d_ibm = (struct BitVect *)FBTable_get_block(4); root = ITable_get_inode(2); // get inode 2 printk("aft retrieval\n");}void flush_to_disk(){// write all file blocks back to disk. //for now call this whenever there is// a change in ibm,dbm,itable, or file blocks. printk("writing back to disk\n"); FBTable_flush_file_blocks();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -