基于c语言的文件系统FAT16操作源代码

2019-08-30 20:57

文件: FAT.H

//微控设计网原创 www.Microcontrol.cn 作者: debug版主 typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32;

#pragma pack(1)

typedef struct {

uint8 BS_jmpBoot[3]; uint8 BS_OEMName[8]; uint16 BPB_BytesPerSec; uint8 BPB_SecPerClus; uint16 BPB_RsvdSecCnt; uint8 BPB_NumFATs; uint16 BPB_RootEntCnt; uint16 BPB_TotSec16; uint8 BPB_Media; uint16 BPB_FATSz16; uint16 BPB_SecPerTrk; uint16 BPB_NumHeads; uint32 BPB_HiddSec; uint32 BPB_TotSec32; uint8 BS_DrvNum; uint8 BS_Reservedl; uint8 BS_BootSig; uint32 BS_VolID; uint8 BS_VolLab[11]; uint8 BS_FilSysType[8]; uint8 ExecutableCode[448]; uint8 ExecutableMarker[2]; } FAT_BPB; typedef struct {

uint8 NAME[8]; uint8 TYPE[3]; } FILE_NAME; typedef struct {

uint16 Start; uint32 Size; } FILE_POSIT; typedef struct {

1

FILE_NAME FileName; uint8 FileAttrib; uint8 UnUsed[10];

uint8 FileUpdateTime[2]; uint8 FileUpdateData[2]; FILE_POSIT FilePosit; } DIR;

typedef struct {

uint16 ClusID; uint16 SecOfClus; uint16 ByteOfSec; } DATA_POSIT;

#pragma pack()

//************************************************************************** //读一个扇区

void ReadBlock(uint32 LBA);

//************************************************************************** //写一个扇区

void WriteBlock(uint32 LBA);

//************************************************************************** void CopyBytes(void* S, void* D, uint16 size);

//************************************************************************** uint8 IsEqual(void* A, void* B, uint8 Size);

//************************************************************************* void EmptyBytes(void* D, uint16 size);

//************************************************************************** //读取BPB数据结构 void ReadBPB(void);

//*************************************************************************** //获取根目录开始扇区号 uint32 DirStartSec(void);

//**************************************************************************** //获取数据区开始扇区号 uint32 DataStartSec(void);

//*************************************************************************** //目录项占用的扇区数

uint16 GetDirSecCount(void);

//**************************************************************************** //获取一个簇的开始扇区

uint32 ClusConvLBA(uint16 ClusID);

//**************************************************************************** //读取文件分配表的指定项

uint16 ReadFAT(uint16 Index);

2

//**************************************************************************** //写文件分配表的指定项

void WriteFAT(uint16 Index, uint16 Value);

//************************************************************************** //获取根目录中可以使用的一项 uint16 GetEmptyDIR(void);

//**************************************************************************** //获得和文件名对应的目录项

uint8 GetFileID(uint8 Name[11], DIR* ID);

//*************************************************************************** //获取一个空的FAT项 uint16 GetNextFAT(void);

//**************************************************************************** //读取根目录的指定项

void ReadDIR(uint16 Index, DIR* Value);

//**************************************************************************** //写根目录的指定项

void WriteDIR(uint16 Index, DIR* Value);

//**************************************************************************** //创建一个空文件

void CreateFile(uint8* FileName[11], uint32 Size);

//************************************************************************ //复制文件分配表,使其和备份一致 void CopyFAT(void);

//**************************************************************************** //操作文件的数据

void OperateFile(uint8 Write ,uint8 Name[11], uint32 Start, uint32 Length, void* Data); //-------------------------------------------------------------------------------

3

文件:FAT.C

//微控设计网原创 www.Microcontrol.cn 作者: debug版主 #include #include \

uint8 BUFFER[512];

uint16 BPB_BytesPerSec; uint8 BPB_SecPerClus; uint16 BPB_RsvdSecCnt; uint8 BPB_NumFATs; uint16 BPB_RootEntCnt; uint16 BPB_TotSec16; uint16 BPB_FATSz16; uint32 BPB_HiddSec;

//******************************************************************************** //读一个扇区

void ReadBlock(uint32 LBA)

//******************************************************************************** {

return; }

//******************************************************************************** //写一个扇区

void WriteBlock(uint32 LBA)

//******************************************************************************** {

return; }

//******************************************************************************** void CopyBytes(void* S, void* D, uint16 size)

//******************************************************************************** {

uint8 *s = S, *d = D; uint16 i;

for(i = 0; i < size; i++) *d++ = *s++; }

//********************************************************************************* uint8 IsEqual(void* A, void* B, uint8 Size)

//**********************************************************************************

4

{

uint8 i, *a = A, *b = B; for(i = 0; i < Size; i++) if(a[i] != b[i]) return 0; return 1; }

//*********************************************************************************** void EmptyBytes(void* D, uint16 size)

//*********************************************************************************** {

uint16 i;

uint8* data = (uint8*)D; for(i = 0; i < size; i++) {

*data++ = 0; } }

//********************************************************************************** //读取BPB数据结构 void ReadBPB(void)

//*********************************************************************************** {

FAT_BPB* BPB = (FAT_BPB*)BUFFER; ReadBlock(0);

//获取参数

BPB_BytesPerSec = BPB->BPB_BytesPerSec; BPB_SecPerClus = BPB->BPB_SecPerClus; BPB_RsvdSecCnt = BPB->BPB_RsvdSecCnt; BPB_NumFATs = BPB->BPB_NumFATs;

BPB_RootEntCnt = BPB->BPB_RootEntCnt; BPB_TotSec16 = BPB->BPB_TotSec16; BPB_FATSz16 = BPB->BPB_FATSz16; BPB_HiddSec = BPB->BPB_HiddSec; }

//************************************************************************************* //获取根目录开始扇区号 uint32 DirStartSec(void)

//************************************************************************************* {

return BPB_RsvdSecCnt + BPB_NumFATs * BPB_FATSz16;

5


基于c语言的文件系统FAT16操作源代码.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:汽车点火系统的电磁干扰研究

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: