没有合适的资源?快使用搜索试试~ 我知道了~
模拟构建文件系统,并能够模拟文件系统的简单功能
资源推荐
资源详情
资源评论
#define BlockSize 512
#define DirSize 32
#define RootSize 2
struct ReserveBlock{
int sysblocknum;/*文件系统总扇区数*/
int resblocknum;/*保留扇区扇区数*/
int fatblocknum;/*FAT表扇区数*/
int rootblocknum;/*根目录区扇区数*/
char fillchar[BlockSize-4*sizeof(int)];/*填充字节*/
};
struct DirBlock{
char filename[11]; /*文件名限长11个字符*/
char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11];
/*填充字节*/
long filelen; /*文件长度*/
int year,month,day; /*日期*/
int firstblockaddr; /*文件首块扇区号*/
};
struct FCBBlock{
int fileid; /*文件标识*/
struct DirBlock fileinfo; /*目录信息*/
long filepos; /*文件读写指针*/
int fdtblockaddr; /*目录项所在块号*/
int fdtblockindex; /*目录项所在块内序号*/
struct FCBBlock *next;/*指向下一个文件控制块的指针*/
};
#include "fat.h"
#include <stdio.h>
#define DirSize 32
#define RootSize 2
struct ReserveBlock{
int sysblocknum;/*文件系统总扇区数*/
int resblocknum;/*保留扇区扇区数*/
int fatblocknum;/*FAT表扇区数*/
int rootblocknum;/*根目录区扇区数*/
char fillchar[BlockSize-4*sizeof(int)];/*填充字节*/
};
struct DirBlock{
char filename[11]; /*文件名限长11个字符*/
char fillchar[DirSize-4*sizeof(int)-sizeof(long int)-11];
/*填充字节*/
long filelen; /*文件长度*/
int year,month,day; /*日期*/
int firstblockaddr; /*文件首块扇区号*/
};
struct FCBBlock{
int fileid; /*文件标识*/
struct DirBlock fileinfo; /*目录信息*/
long filepos; /*文件读写指针*/
int fdtblockaddr; /*目录项所在块号*/
int fdtblockindex; /*目录项所在块内序号*/
struct FCBBlock *next;/*指向下一个文件控制块的指针*/
};
#include "fat.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct ReserveBlock sys1;
struct FCBBlock *fcb;
struct DirBlock fil[32],*dir;//目录项
int *fat1;
char *str,*ptr;
char fillchar[BlockSize];
FILE *fp;
FILE *OPENSYS(char *filename)
{ int i;
fp=fopen(filename,"rb+");
fread(&sys1,1,BlockSize,fp);
//printf("%d %d %d %d \n",sys1.sysblocknum,sys1.resblocknum,sys1.fatblocknum,sys1.rootblocknum);
fat1=(int *)malloc(sys1.sysblocknum);
for(i=0;i<sys1.fatblocknum;i++)
fread(fat1,sizeof(int)*sys1.sysblocknum,1,fp);//把基本的文件系统都读进来
fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0);//修改文件指针的位置
dir=fil;//目录指针
fread(dir,DirSize*32,1,fp);
return fp;
}
int CLOSESYS(FILE *stream)
{ int i;
fseek(stream,sys1.resblocknum*BlockSize,0);
fwrite(fat1,sizeof(int)*sys1.sysblocknum,1,stream);
fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0);
fwrite(dir,DirSize*32,1,fp);
fclose(fp);
return 1;
#include <stdlib.h>
struct ReserveBlock sys1;
struct FCBBlock *fcb;
struct DirBlock fil[32],*dir;//目录项
int *fat1;
char *str,*ptr;
char fillchar[BlockSize];
FILE *fp;
FILE *OPENSYS(char *filename)
{ int i;
fp=fopen(filename,"rb+");
fread(&sys1,1,BlockSize,fp);
//printf("%d %d %d %d \n",sys1.sysblocknum,sys1.resblocknum,sys1.fatblocknum,sys1.rootblocknum);
fat1=(int *)malloc(sys1.sysblocknum);
for(i=0;i<sys1.fatblocknum;i++)
fread(fat1,sizeof(int)*sys1.sysblocknum,1,fp);//把基本的文件系统都读进来
fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0);//修改文件指针的位置
dir=fil;//目录指针
fread(dir,DirSize*32,1,fp);
return fp;
}
int CLOSESYS(FILE *stream)
{ int i;
fseek(stream,sys1.resblocknum*BlockSize,0);
fwrite(fat1,sizeof(int)*sys1.sysblocknum,1,stream);
fseek(fp,(sys1.fatblocknum+sys1.resblocknum)*BlockSize,0);
fwrite(dir,DirSize*32,1,fp);
fclose(fp);
return 1;
剩余20页未读,继续阅读
资源评论
ZL5300
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功