阅读操作系统方面的书籍,查询网络资料,了解操作系统的文件系统原理。通过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");