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

📄 file-block.c

📁 用于汇编领域的,运用于OS的MAIN函数.基于硬件基础的源代码
💻 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   ReadDiskBlock(bno, 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);   mymemcpy(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 + -