资源简介
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_FAT32文件系统
- XV6阅读报告包含进程线程、内存管理
- SD卡读写规范、时序图、FAT32文件系统
- FAT32文件系统介绍图文介绍和
- ZFS文件系统.pdf
- stm32f103上移植fatfs文件系统
- ucos文件系统完整
- 操作系统课程设计报告-多用户文件系
- 操作系统课程设计,单索引文件系统
- SpringBoot+mybatis登录注册及其账号密码
- SpringBoot-mybatis登录、注册、拦截器、
- 模拟实现采用二级目录结构的磁盘文
- linux系统移植嵌入式linux系统:内核、
- 北大Nachos文件系统实习报告
- 《HDFS——Hadoop分布式文件系统深度实
- Fatfs R0.13b 版本官方源码
- FATFS FAT32使用浅谈
- SCUT fuse文件系统
- wdk 中 fastfat文件系统代码
- znFat文件系统源码
- 如何读写FAT32文件系统
- Linux内核探秘 深入解析文件系统和设
- 数据重现:文件系统原理精解与数据
- 基于STM32的智能管家门控系统设计与实
- 数据重现:文件系统原理精解与数据
- Ceph设计原理与实现.pdf
- CiscoASA 5520防火墙flash文件系统恢复步
- FATFS STM32H743.rar
评论
共有 条评论