📄 file-block.c
字号:
#include "fs.h"void FB_dump(char *blk){ int i; unsigned long *buf; buf=(unsigned long *)blk; for(i=0;i<12;i++) printk("%x ",buf[i]);}void FBTable_dump_blk(int n){// dump fbtable.arr[n].blk printk("dumping block %d\n",n); FB_dump(FBTable_find_block(n));}void FBTable_init(){// blk_nr=-1 means no block int i; for(i=0;i<MAX_FBT;i++) fbtable.arr[i].blk_nr=-1;}int FBTable_find_empty_block_frame(){ int i; for(i=0;i<MAX_FBT;i++) if (fbtable.arr[i].blk_nr == -1) return i; panic("file block table full\n");}char * FBTable_retrieve_block_from_disk(int bno){// retrieve block bno from disk, put it in fbtable, and return the pointer char temp[BLKSIZE]; int n; // read ReadRelativeSector(bno, temp, temp); // put it in fbtable n=FBTable_find_empty_block_frame(); printk("FBTable_retrieve_blk_from_disk. read blk %d into fbtable[%d]\n",bno,n); memcpy(fbtable.arr[n].blk, temp, BLKSIZE); fbtable.arr[n].blk_nr=bno; return fbtable.arr[n].blk;}char * FBTable_find_block(int bno){// return file block pointer whose block num is bno int i; for(i=0;i<MAX_FBT;i++) if (fbtable.arr[i].blk_nr == bno) return fbtable.arr[i].blk; panic("FBTable_find_block:no such block:%d\n",bno);}char * FBTable_get_block(int bno){// return file block pointer whose block num is bno int i; for(i=0;i<MAX_FBT;i++) if (fbtable.arr[i].blk_nr == bno) return fbtable.arr[i].blk; // couldn't find. get it from disk return FBTable_retrieve_block_from_disk(bno);}/* void FBTable_read_fblock_from_disk(int bn){// get block bn from floppy disk. put it in fbt int x; x=FBTable_find_empty_block_frame(); fbtable.arr[x].blk_nr = bn; fbtable.arr[x].dirty = 0; // not changed yet ReadRelativeSector(bn, fbtable.arr[x].blk, fbtable.arr[x].blk);}*/void FBTable_flush_file_blocks(){// flush all dirty blocks back to disk int i; int bn; char * blk; int dirty; for(i=0;i<MAX_FBT;i++){ bn = fbtable.arr[i].blk_nr; blk = fbtable.arr[i].blk; dirty = fbtable.arr[i].dirty; //if (bn != -1 && dirty==1) if (bn != -1) // for now flush all has-data blocks. dirty should be // implemented later WriteRelativeSector(bn, blk, blk); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -