• 大小: 4.06MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-09-19
  • 语言: 其他
  • 标签: 文件系统  

资源简介

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个文件信息

评论

共有 条评论