操作系统文件管理
1.用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。2.要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用
文件管理
1.实验目的
1.用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。
2.要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。
2.实验内容与要求
设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
1.程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED);另外,为打开文件设置了运行文件目录(AFD)。
2.为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作
3.算法与框图:
因系统小,文件目录的检索使用了简单的线性搜索。文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。
程序中使用的主要设计结构如下:
主文件目录和用户文件目录( MFD、UFD)打开文件目录( AFD)(即运行文件目录)
3.流程图与模块调用
4.实验分析
本次实验实现的是,操作系统对磁盘中文件管理的一些操作,对文件管理采用二级文件目录。在操作之前,首先要定义三个结构体,其中包括:
1. MFD目录
主要包括用户名和文件目录指针,用来指向该用户所存文件的存储位置;
2. UFD目录
主要包括文件名、保护码和文件长度,表示具体的某个文件;
3. AFD目录
主要包括打开文件名、打开保护码和读写指针,表示对于当前用户已打开的文件记录;
实验内容为:
- 创建一个新文件
- 删除文件
- 打开文件
- 关闭文件
- 读入文件
- 写入文件
在实现整个文件管理的过程中,建议结合平时是如何对一个文件进行操作的,来实现整个代码内容,在完成实验中,主要是模拟整个文件管理逻辑,无法真正的对文件操作,比如在读入文件时,只需要在当前已打开的文件中,找到要写入的文件,然后对其服状态“正在写入”,表示正在写入操作,即完成写入文件的内容,因为整个实验的目的是为了模拟,无法真正的表示写入该文件。
5.运行情况
6.实验体会
在完成整个实验后,结合平常对文件的各种操作,能够理解操作系统在实现文件管理时,背后进行的一系列操作,整个文件管理相比于其他实验,给我更深刻的体会是,算法的逻辑相对少一点,但是要实现的功能和存储的信息要多出很多,这也是操作系统在设计时需要考虑的一件事,合理存储这些记录信息,以便用户在操作时有更好的交互性。
代码
#include<iostream>
#include<vector>
using namespace std;
struct UFD
{
string filename;//文件名
string protect;//保护码
int length;//文件长度
};
struct MFD
{
string user;//用户名
vector<UFD> ip;//文件目录指针
};
struct AFD
{
string open_file;//打开文件名
string open_protect;//打开保护码
string read_write;//读写指针
};
//vector<UFD> file;
vector<MFD> use(10);
vector<AFD> open;//当前打开
void print(char s)
{
int p = s - 'A';
if (use[p].ip.size() == 0)
{
cout << "该用户还没有文件" << endl;
}
else
{
for (int i = 0; i < use[p].ip.size(); i++)
{
cout << "文件名: " << use[p].ip[i].filename << " 保护码: " << use[p].ip[i].protect << " 文件长度: " << use[p].ip[i].length << endl;
}
}
}
void deletef(char s, string na)//删除文件
{
for (int i = 0; i < use[s - 'A'].ip.size(); i++)
{
if (na == use[s - 'A'].ip[i].filename)
{
use[s - 'A'].ip.erase(use[s - 'A'].ip.begin()+i);//删除
return;
}
}
cout << "未找到删除的文件" << endl;
}
void creatf(char s,string na,string pro,int len)//创造新文件
{
UFD q;
q.filename = na;
q.length = len;
q.protect = pro;
if(use[s-'A'].ip.size()<10)
use[s - 'A'].ip.push_back(q);
else
{
cout << "所拥有文件已满" << endl;
}
}
void openf(char s,string na)//打开文件
{
if (open.size() >= 5)
{
cout << "打开文件个数已到上限" << endl;
return;
}
for (int i = 0; i < use[s - 'A'].ip.size(); i++)
{
if (na == use[s - 'A'].ip[i].filename)
{
AFD q;
q.open_file = na;
q.open_protect = use[s - 'A'].ip[i].protect;
q.read_write = "close";
open.push_back(q);
cout << "打开文件名: " << q.open_file << " 打开文件保护码: " << q.open_protect << " 读写指针: " << q.read_write << endl;
}
}
}
void closef( string na)//关闭
{
for (int i = 0; i < open.size(); i++)
{
if (open[i].open_file == na)
{
open.erase(open.begin() + i);
break;
}
}
}
void readf(string na)//读取文件
{
for (int i = 0; i < open.size(); i++)
{
if (open[i].open_file == na)
{
open[i].read_write = "reading";
break;
}
}
}
void writef(string na)//写入文件
{
for (int i = 0; i < open.size(); i++)
{
if (open[i].open_file == na)
{
open[i].read_write = "writing";
break;
}
}
}
int main()
{
cout << "共有10位用户可选:" << endl;
for (int i = 0; i < 10; i++)
{
/*string ee;
string lo ;
lo = '0' + i;
ee = "use" + lo;*/
use[i].user = 'A'+ i;
cout << use[i].user << " ";
}
cout << endl;
cout << "请输入用户名" << endl;
char wg;
cin >> wg;
print(wg);
cout << "请输入指令:" << endl;
cout << "1:创建新文件 2:删除文件" << endl << "3:打开文件 4:关闭文件" << endl << "5:读出文件 6:写入文件" << endl << "7:查看文件目录 8:退出" << endl;
int hlp;
cin >> hlp;
while (hlp != 8)
{
if (hlp == 1)
{
string name;//文件名
string p = "11";//保护码默认可读可写
int leng;//长度
cout << "请输入文件名、长度" << endl;
cin >> name >> leng;
creatf(wg, name, p, leng);
// cout << "创建成功" << endl;
}
else if (hlp == 2)
{
string name;
cout << "请输入你要删除的文件名" << endl;
cin >> name;
deletef(wg, name);
cout << "删除成功" << endl;
}
else if (hlp == 3)
{
string name;
cout << "请输入你要打开的文件名" << endl;
cin >> name;
openf(wg, name);
cout << "打开成功" << endl;
}
else if (hlp == 4)
{
string name;
cout << "请输入你要关闭的文件名" << endl;
cin >> name;
closef(name);
cout << "关闭成功" << endl;
}
else if (hlp == 5)
{
string name;
cout << "请输入你要读取的文件名" << endl;
cin >> name;
readf(name);
cout << "读取成功" << endl;
}
else if (hlp == 6)
{
string name;
cout << "请输入你要写入的文件名" << endl;
cin >> name;
writef(name);
cout << "写入成功" << endl;
}
else if (hlp == 7)
{
print(wg);
}
cout << "请输入指令" << endl;
cin >> hlp;
}
}
更多推荐
所有评论(0)