资源简介
设计一个简单的磁盘文件管理系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现:
(1)支持多级目录结构,支持文件的绝对路径访问;
(2)文件的逻辑结构采用流式(字节流)结构,物理结构采用链式结构中的显式链方式;
(3)磁盘管理采用文件分配表;
(4)实现文件操作命令:创建目录、列表目录、删除空目录、创建文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性;
(5)通过主函数对所实现的功能进行测试。
代码片段和文件信息
#include
#include
#include
#define Block_number 128
#define Block_size 64
//目录和文件的结构定义
typedef struct node
{
char name[50]; //目录或文件的名字
int type; //0代表目录,1代表普通文件
char state;//目录状态,$表示空目录~表示非空
int file_state;//文件状态,1表示open,0表示close
int file_size; //文件的大小
int strat_number;//文件起始盘快号
char property[5];//r-表示只读,rw表示读写
char content[Block_number * Block_size];//文件的内容
char extension[10];//文件扩展名
struct node *next; //指向下一个兄弟结点的指针
struct node *sub; //指向第一个子结点的指针
struct node *father; //指向父结点的指针
}dirNode;
//文件分配表结构定义
typedef struct Node
{
char name[50];//文件名
int start_number;//起始快号
int next_number;//文件存放位置的下一个块号
int number;//所在块号
int length;//长度
int state;//盘块记录,0表示可用,1表示占用,-1表示文件结束,其他值表示故障块
struct Node *next;
}*FAT;
//定义字符串结构
typedef struct
{
char data[100];
}string;
//记录已打开或建立的文件信息结构
typedef struct table
{
char path[100];//路径信息
char property[5];//r-表示只读,rw表示读写
int start_number;//起始块号
int length;//文件长度
char type;//o表示打开,c表示关闭
struct table *next;
}*Table;
dirNode *work;//工作目录
dirNode *root;//根目录
Table Info_t;//已打开或建立的文件信息表
FAT fat;//文件分配表带头结点
char path[100];//记录路径
int Is_copy = 0;//表示是否是复制指令,1是
int size = 0;//复制命令时的文件大小
//函数申明
void InitFAT();//初始化文件分配表
void InitDir();//初始化目录
void InitInfo_t();//初始化文件信息表
int Create_File(char way[]);//创建文件
void Open_File(char way[]);//打开文件
void Close_File(char way[]);//关闭文件
void Read_File(char way[]);//读文件
void Write_File(char way[]);//写文件
void Delete_File(char way[]);//删除文件
void Show_Content_File(char way[]);//显示文件内容
void Copy_File(char way1[]char way2[]);//复制文件
void Change_Property_File(char way[]);//改变文件属性
void Make_Dir(char way[]);//创建目录
void Show_Dir();//显示所有目录
void Delete_Dir(char way[]);//删除目录
void Change_Dir(char way[]);//改变工作目录
dirNode *Search(char way[]);//查找路径
int order(char command[]);//命令解析
void Help();//帮助函数
//初始化文件分配表
void InitFAT()
{
int i;
FAT filetabletemp;
fat = (FAT)malloc(sizeof(Node));
temp = fat;
for(i = 0;i < Block_number;i ++)
{
filetable = (FAT)malloc(sizeof(Node));
filetable->state = 0;
filetable->number = i;
filetable->next_number = -1;
filetable->start_number = -1;
filetable->length = -1;
strcpy(filetable->name““);
filetable->next = NULL;
temp->next = filetable;
temp = temp->next;
}
}
//初始化目录
void InitDir()
{
root = (dirNode*)malloc(sizeof(node));
strcpy(root->name“root“);
root->type = 0;
root->file_state = -1;
root->father = NULL;
root->next = NULL;
root->sub = NULL;
root->state = ‘$‘;
work = root;
strcpy(path“root“);
}
//初始化文件信息表
void InitInfo_t()
{
Info_t = (Table)malloc(sizeof(table));
Info_t->length = -1;
strcpy(Info_t->path““);
strcpy(Info_t->property““);
Info_t->start_number = -1;
Info_t->type = ‘c‘;
Info_t->next = NULL;
}
//创建文件
int Create_File(char way[])
{
int i = 0j = 0;
int file_size;//文件大小
int number;//文件所要的块数
char temp[Block_number * B
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-04-07 20:07 OS_Test3\
目录 0 2014-04-07 20:07 OS_Test3\Debug\
文件 200813 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.exe
文件 202864 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.ilk
文件 226524 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.pch
文件 386048 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.pdb
文件 48542 2013-06-26 20:59 OS_Test3\Debug\main.obj
文件 33792 2014-02-23 22:48 OS_Test3\Debug\vc60.idb
文件 45056 2013-06-26 20:59 OS_Test3\Debug\vc60.pdb
文件 4304 2013-06-09 14:12 OS_Test3\OS_Test3.dsp
文件 541 2013-06-09 14:11 OS_Test3\OS_Test3.dsw
文件 58368 2014-02-23 22:49 OS_Test3\OS_Test3.ncb
文件 53760 2014-02-23 22:49 OS_Test3\OS_Test3.opt
文件 895 2013-06-26 20:59 OS_Test3\OS_Test3.plg
文件 24781 2013-06-23 14:33 OS_Test3\main.cpp
相关资源
- 页式存储器管理模拟程序设计
- NS-3网络模拟器基础与应用.pdf
- 求职+模拟电路工程师+模电数电笔
- 模拟数据生成器 Data-Processer
- QML:模拟交通灯
- CC2530+OLED电压信号模拟信号显示串口传
- 模拟数字转换器,模电数电课程设计
- 模拟实现单级目录、单级索引的索引
- PMP答题卡,供模拟测试用
- 使用socket编程模拟滑动窗口协议
- NS2adhoc模拟文件,可模拟多种协议,无
- AODV 模拟 TCL NS2 程序
- 螺旋输送EDEM模拟
- labview 模拟电梯的程序
- 交通流模拟元胞自动机换道模型代码
- PFC5.0 模型生成
- 网络工程师模拟考试系统含序列号
- PLC模拟量控制在变频调速的应用.doc
- LBM模拟一维导热
- 数字信号和模拟信号的区别详解、d
- HCIE-R&S V3.0 模拟LAB预配置.rar
- GPS信号的模拟捕获和跟踪仿真
- 单片机如何通过ADC模块采集模拟信号
- 7MHz高频载波振荡器
- 低功耗模拟前端电路设计
- qt模拟交通信号灯
- Proteus模拟基于51单片机的断电保护实
- 虚拟机模拟防火墙专用工具--piped
- mcmc模拟代码
- franc2dl数值模拟
评论
共有 条评论