c++实现文件系统模拟设计

本文档介绍了如何通过C++来模拟操作系统文件系统,结合Windows和Linux的特性,实现包括创建、删除目录和文件,以及打开、关闭、读取和写入文件等功能。模拟设计的亮点在于提供了类似Linux中`ls -l`的功能,展示文件详细信息。核心功能如createdir()、deletedir()、create()、delete()、open()、close()、read()和write(),重点在于文件的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅读操作系统方面的书籍,查询网络资料,了解操作系统的文件系统原理。通过c++语言实现文件系统模拟设计。完成的文件系统模拟设计主要是结合了widows和Linux操作系统的文件操作。在Windows下文件夹下可以包含文件夹和文件,而我们只能看到文件夹和文件的名字,默认情况下无法知道文件的具体信息,比如文件的大小,文件的所有者等等。在linux下通过指令ls -l可以知道该目录下的目录和文件,这些文件包括了文件所有者,文件所有组,文件大小,文件的权限等等;在完成文件系统模拟设计,通过dir()函数可以观察到目录和文件,文件显示了文件的权限,文件的所有者,文件的所有组,文件的模拟物理地址,文件大小等等。同时还设计了这些函数来实现文件系统模拟设计
createdir(); 创建子目录
deletedir(); 删除子目录
create(); 创建文件
deleted(); 删除文件
open(); 打开文件,主要是服务于read()和write()这两个函数
close(); 关闭文件
read(); 读取文件
write(); 向文件写入文件,存在两种情况,当文件为空时,可直接写入,当文件存在内容时,显示出存在的内容,然后在内容后追加写入的内容。

#include<iostream>
#include<vector>
#include<string>
#include<cstring> 
#include<algorithm>
#include<cstdlib>
#include<cstdio>
using namespace std;

//物理地址的起始位置
int addressstart = 1000;

//文件结构
struct document
{
   
   
    //文件名、物理地址、保护码和文件长度
    string name;
	//物理地址为连续的,以1000开始
    int address;
	//保护码用rwx表示
    string procode;
	//文件长度创建后默认为0
    int len;
	//存储写入的文件
	vector<string> vstr;
	//文件的所有者
	string usrname;
	//文件的所属组
	string usrgruop;
};

//目录结构
struct dirs{
   
   
	//目录名
	string dirname;
	//下一个目录作为子目录
	vector<dirs>    vdir;
	//该目录下的文件
	vector<document>  vdoc;
};


//以下是有关目录的有关操作
void dir(dirs d);
//创建子目录
void createdir(dirs &dparent);
//删除子目录
void deletedir(dirs &dparent);
//以下是文件的有关操作
void create(dirs & d);
void deleted(dirs & d);
int  open(dirs & d,document doc);
void close(dirs & d);
void read(dirs & d);
void write(dirs & d);
void menu();
void work(dirs &d);
int main()
{
   
   
	//创建一个root目录
    dirs d;
    d.dirname = "root";
    work(d);
    system("pause");
    return 0;
}

//显示文件的相关操作
void menu()
{
   
   
	printf("\t****************\n");
	printf("\t*  1.创建目录  *\n");
	printf("\t*  2.删除目录  *\n");
	printf("\t*  3.创建文件  *\n");
	printf("\t*  4.删除文件  *\n");
	printf("\t*  5.输入信息  *\n");
	printf("\t*  6.读取信息  *\n");
	printf("\t*  7.显示信息  *\n");
	printf("\t  *8.退出  *\n");
	printf("\t****************\n");
	printf("\t请输入指令(0-8)  \n"
1. 在现有机器硬盘上开辟100M的硬盘空间,作为设定的硬盘空间。 2. 编写一管理程序simdisk对此空间进行管理,以模拟Linux文件系统,要求: (1) 盘块大小1k (2) 空闲盘块的管理:Linux位图法 (3) 结构:超级块, i结点区, 根目录区 3. 该simdisk管理程序的功能要求如下: (1) info: 显示整个系统信息(参考Linux文件系统的系统信息),文件可以根据用户进行读写保护。目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。 (2) cd …: 改变目录:改变当前工作目录,目录不存在时给出出错信息。 (3) dir …: 显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。 (4) md …: 创建目录:在指定路径或当前路径下创建指定目录。重名时给出错信息。 (5) rd …: 删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。 (6) newfile …: 建立文件。 (7) cat …: 打开文件。 (8) copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统模拟Linux文件系统间的文件拷贝,host文件系统的文件命名为<host>…,如:将windows下D:盘的文件\data\sample\test.txt文件拷贝到模拟Linux文件系统中的/test/data目录,windows下D:盘的当前目录为D:\data,则使用命令: simdisk copy <host>D:\data\sample\test.txt /test/data 或者:simdisk copy <host>D:sample\test.txt /test/data (9) del …: 删除文件:删除指定文件,不存在时给出出错信息。 (10) check: 检测并恢复文件系统:对文件系统中的数据一致性进行检测,并自动根据文件系统的结构和信息进行数据再整理。 4. 程序的总体流程为: (1) 初始化文件目录; (2) 输出提示符,等待接受命令,分析键入的命令; (3) 对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值