资源简介
1.开辟100M的硬盘空间,作为设定的硬盘空间。
2.模拟Linux文件系统,功能如下:
(1)info: 显示整个系统信息
(2)cd …: 改变目录:改变当前工作目录,目录不存在时给出出错信息。
(3)dir …: 显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。
(4)md …: 创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。
(5)rd …: 删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。
(6)newfile …: 建立文件。
(7)cat …: 打开文件。
(8)copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝。
(9)del …: 删除文件:删除指定文件,不存在时给出出错信息。
(10)check:检测并恢复文件系统。
模拟文件系统的前端操作shell:
前端的shell进程和后端的simdisk进程之间利用共享内存进行进程间通信(IPC)

代码片段和文件信息
/***************************************************************************************
command.cpp
所有可执行的命令,每个命令一个函数
***************************************************************************************/
#include“fs.h“
#include
#include
#include
#include
#include
//using namespace std;
void fs::info()
{
int fileNum = 0; //总文件数
int dirNum = 0; //总目录数
int i;
freeSpace = Super.freeBlock * blockSize; //空闲磁盘空间
usedSpace = (blockNum - Super.freeBlock) * blockSize; //已用空间
for (i = 0; i < inodeNum; i++) //计算文件和目录数目
{
if (Inode[i].isFile == 0) dirNum++;
if (Inode[i].isFile == 1) fileNum++;
}
cout << “磁盘空间:“ << “100 MB“ << endl;
cout << “已使用空间: “ << double(usedSpace) / 1024 / 1024 << “ MB “ < cout << “空闲空间: “ << double(freeSpace) / 1024 / 1024 << “ MB“ << endl;
cout << “总目录数: “ << dirNum << endl;
cout << “总文件数: “ << fileNum << endl;
}
int fs::md(char *path)
{
int parent;
parent = getParentIndex(path);
if ((parent != -2) && (parent != -1)) //父目录存在
{
int flag;
flag = find(getName(path) parent); //判断路径是否存在
if (flag!=-1) //重名目录
{
cout << “目录已存在! “ << endl;
return -1;
}
else
{
if (dirInit(parent getName(path)) != -1) //使用Dir_Init函数
{
return parent;
}
}
}
if (parent == -1)
{
cout << “不能创建与根目录同名的目录! “ << endl; //与根目录同名
return -1;
}
cout << “目录创建失败! “ << endl;
return -1;
}
int fs::rd(char * path)
{
// HANDLE shell = OpenSemaphore(SEMAPHORE_ALL_ACCESS TRUE “shell“);
// HANDLE disk = OpenSemaphore(SEMAPHORE_ALL_ACCESS TRUE “disk“);
int parent = getParentIndex(path);
int flag = -1;
int tmpIndex;
char choice;
if (parent == -1)
{
cout << “根目录无法删除! “ << endl;
return -1;
}
if (parent != -2) //判断要删除的目录是否存在
{
flag = find(getName(path) parent);
if ((flag != -1) && (Inode[flag].isFile == 0))
{
tmpIndex = flag;
if (Inode[tmpIndex].childNum > 0) //删除目录非空
{
cout << “删除目录非空是否继续?(Y/N)“ << endl;
// map->flag = 1;
// ReleaseSemaphore(shell 1 NULL);
// WaitForSingleobject(disk INFINITE);
cin >> choice;
// strcpy(choice map->display);
}
if (choice == ‘Y‘ || choice == ‘y‘ || Inode[tmpIndex].childNum == 0)
{
delDir(tmpIndex parent);
return 1;
}
}
}
cout << “删除失败!“ << endl;
return -1;
}
int fs::dir(char * path)
{
int i = 0 j = 0;
int parent;
int flag;
if (!strcmp(path “/s“)) //dir /s命令,显示所有文件和目录
{
for (i = 1; i < 15; i++)
{
if ((Inode[i].isFile == 0) || (Inode[i].isFile == 1))
{
cout << getAbsolutePath(i); //显示完整路径
for (j = strlen(getAbsolutePath(i)); j < 30; j++) //输出格式控制
{
cout << “ “;
}
if (Inode[i].isFile == 0) //显示是文件类型还是目录类型
cout << “目录 “;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11339 2009-02-24 22:17 DISK\command.cpp
文件 615 2009-02-24 22:07 DISK\conf.cpp
文件 45155 2009-02-24 22:17 DISK\Debug\command.obj
文件 10954 2009-02-24 22:07 DISK\Debug\conf.obj
文件 274476 2009-02-24 22:19 DISK\Debug\DISK.exe
文件 358360 2009-02-24 22:19 DISK\Debug\DISK.ilk
文件 3750140 2009-02-24 22:19 DISK\Debug\DISK.pch
文件 746496 2009-02-24 22:19 DISK\Debug\DISK.pdb
文件 40944 2009-02-24 22:19 DISK\Debug\fs.obj
文件 16814 2009-02-24 22:19 DISK\Debug\main.obj
文件 22020 2009-02-24 22:17 DISK\Debug\shell.obj
文件 189440 2009-02-24 22:19 DISK\Debug\vc60.idb
文件 94208 2009-02-24 22:19 DISK\Debug\vc60.pdb
文件 4618 2009-02-22 22:26 DISK\DISK.dsp
文件 531 2009-02-08 22:42 DISK\DISK.dsw
文件 107520 2009-02-24 22:20 DISK\DISK.ncb
文件 55808 2009-02-24 22:20 DISK\DISK.opt
文件 1346 2009-02-24 22:19 DISK\DISK.plg
文件 14537 2009-02-24 22:19 DISK\fs.cpp
文件 2634 2009-02-24 22:06 DISK\fs.h
文件 1113 2009-02-24 22:18 DISK\main.cpp
文件 3722 2009-02-24 22:17 DISK\shell.cpp
文件 353 2009-02-24 22:07 DISK\struct.h
文件 249902 2009-02-24 15:35 shell\Debug\shell.exe
文件 376240 2009-02-24 15:35 shell\Debug\shell.ilk
文件 67239 2009-02-24 15:35 shell\Debug\shell.obj
文件 5513468 2009-02-23 15:54 shell\Debug\shell.pch
文件 582656 2009-02-24 15:35 shell\Debug\shell.pdb
文件 214016 2009-02-24 15:35 shell\Debug\vc60.idb
文件 143360 2009-02-24 15:35 shell\Debug\vc60.pdb
............此处省略28个文件信息
- 上一篇:VLSI超大规模集成电路电子学
- 下一篇:systemverilog经典教程
相关资源
- STM32基于rt_thread操作系统的SDHC卡文件
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- 广东工业大学操作系统实验四文件系
- 二级文件系统(操作系统)
- 基于stm32F103vct6的SD卡FATFS文件系统移植
- linux系统的二级文件系统(QT实现了简
- 为linux系统设计一个简单的二级文件系
- linux2.6.11.12内核源码注释
- zedboard ubuntu16.04文件系统
- linux环境下课程设计《二级文件系统》
- MooseFS 分布式文件系统源码分析202页,
- 多用户多级目录文件系统的实现
- 模拟Unix文件系统,操作系统课程设计
- linux文件系统设计
- 基于STM32平台的智能药箱系统包含文件
- stm32f103的sdio方式读sd卡,带fatfs文件系
- Stm32驱动SDCard移植FATFS文件系统
- FS4412文件系统镜像文件
- 文件系统模拟 windows资源管理器模拟
- fuse文件系统课程设计源代码和设计文
- 操作系统课程设计报告-单用户多级文
- 模拟Linux文件系统含源码及报告
- 数据结构课设文件系统模拟器
- stm32 SD卡 fat系统 串口控制台
- 并行文件系统简介
- SD_Flash+FatFs+浮点型数据存取-Y.rar
- Tiny6410根文件系统yaffs2根文件系统
- STM32 adc采集数据存到SD卡中
- STM32_SD_FATFS文件系统学习资料
- 操作系统大型实验报告加源码
评论
共有 条评论