资源简介
用文件仿硬盘的C语言程序——模仿linux下的EXT2文件系统,类EXT2文件系统
代码片段和文件信息
#define DATA_BLOCK 263680
#define BLOCK_SIZE 512
#define DISK_START 0
#define BLOCK_BITMAP 512
#define INODE_BITMAP 1024
#define INODE_TABLE 1536
#define INODE_SIZE 64
#include
#include
#include
#include
struct group_desc{
char bg_volume_name[16]; /*卷名*/
unsigned short bg_block_bitmap; /*保存块位图的块号*/
unsigned short bg_inode_bitmap; /*保存索引结点位图的块号*/
unsigned short bg_inode_table; /*索引结点表的起始块号*/
unsigned short bg_free_blocks_count; /*本组空闲块的个数*/
unsigned short bg_free_inodes_count; /*本组空闲索引结点的个数*/
unsigned short bg_used_dirs_count; /*本组目录的个数*/
char bg_pad[4]; /*填充(0xff)*/
};
struct inode{
unsigned short i_mode; /*文件类型及访问权限*/
unsigned short i_blocks; /*文件的数据块个数*/
unsigned long i_size; /*大小( 字节)*/
unsigned long i_atime; /*访问时间*/
unsigned long i_ctime; /*创建时间*/
unsigned long i_mtime; /*修改时间*/
unsigned long i_dtime; /*删除时间*/
unsigned short i_block[8]; /*指向数据块的指针*/
char i_pad[24]; /*填充(0xff)*/
};
struct dir_entry{ //目录项结构
unsigned short inode; /*索引节点号*/
unsigned short rec_len; /*目录项长度*/
unsigned short name_len; /*文件名长度*/
char file_type; /*文件类型(1: 普通文件, 2: 目录.. )*/
char name[9]; /*文件名*/
};
char Buffer[512]; //针对数据块的 缓冲区
char tempbuf[4097]; //
unsigned char bitbuf[512]; //位图缓冲区
unsigned short index_buf[256];
short fopen_table[16]; // 文件打开表
unsigned short last_alloc_inode; // 最近分配的节点号
unsigned short last_alloc_block; // 最近分配的数据块号
unsigned short current_dir; // 当前目录的节点号
struct group_desc super_block[1]; // 组描述符缓冲区
struct inode inode_area[1]; // 节点缓冲区
struct dir_entry dir[32]; // 目录项缓冲区
char current_path[256]; // 当前路径名
unsigned short current_dirlen;
FILE *fp;
/************************************* alloc *******************************************************/
void update_group_desc()
{
fseek(fpDISK_STARTSEEK_SET);
fwrite(super_blockBLOCK_SIZE1fp);
}
void reload_group_desc()//载入组描述符
{
fseek(fpDISK_STARTSEEK_SET);
fread(super_blockBLOCK_SIZE1fp);
}
void update_inode_bitmap()//更新inode位图
{
fseek(fpINODE_BITMAPSEEK_SET);
fwrite(bitbufBLOCK_SIZE1fp);
}
void reload_inode_bitmap()//载入inode位图
{
fseek(fpINODE_BITMAPSEEK_SET);
fread(bitbufBLOCK_SIZE1fp);
}
void update_block_bitmap()//更新block位图
{
fseek(fpBLOCK_BITMAPSEEK_SET);
fwrite(bitbufBLOCK_SIZE1fp);
}
void reload_block_bitmap()//载入block位图
{
fseek(fpBLOCK_BITMAPSEEK_SET);
fread(bitbufBLOCK_SIZE1fp);
}
void update_inode_entry(unsigned short i)//更新第i个inode入口
{
fseek(fpINODE_TABLE+(i-1)*INODE_SIZESEEK_SET);
fwrite(inode_areaINODE_SIZE1fp);
}
void reload_inode_entry(unsigned short i)//载入第i个inode入口
{
fseek(fpINODE_TABLE+(i-1)*INODE_SIZESEEK_SET);
fread(inode_areaINODE_SIZE1fp);
}
void reload_dir(unsigned short i)//更新第i个目录
{
fs
- 上一篇:HTTP chunked方式传输的C语言解析
- 下一篇:基于MFC的图书管理系统
相关资源
- 基于STM32F407ZG的监控摄像头及FATFS文件
- 微型文件系统源码(FatFs)
- Linux c语言 学生成绩管理系统
- Linux开发工具手册
- Linux操作系统下C语言编程从零开始
- 基于Linux下C语言开发的员工管理系统
- 超级玛丽c++源码win32Linux平台
- 可解码所有jpeg格式图片的开源JPEG解码
- UNIX/LINUX下C语言中文短信UCS2编码和解
- 嵌入式工程师必知必会 (完整高清中
- linux-2.6.24.rar
- Linux下C语言操作静态ARP表,包括增加
- c语言 linux 贪吃蛇.doc
- Linux多线程服务端编程:使用muduo C+
- NTFS文件系统下用C++定位文件簇号和目
- libstdc++.so.6.0.23_linux7
- libstdc++-devel-4.1.2-48.el5.x86_64
- C++版仿Linux文件管理系统
- 基于SDL的贪吃蛇游戏
- 链表栈的基本操作(C语言
- 基于linux C/C++和Qt的聊天程序
- Linux+gladeGTK++C语言+mysql的模仿QQ聊天工
- 嵌入式linuxC语言程序设计基础教程
- C Programming in Linux Linux下C语言
- Linux软件工程师(C语言)实用教程_
- C/C++文件系统树状结构
- linux libstdc++.so.6库
- 基于GEC6818的电子相册和2048小游戏.z
- Linux下C语言FLV文件拆解成h264视频流和
- linux系统下的fit客户端filezilla以及安装
评论
共有 条评论