资源简介
包括实验题目,代码及运行结果
实验8 文件管理(2学时)
一、实验目的
理解文件系统的主要概念及文件系统内部功能和实现过程。
二、实验内容
采用二级文件目录结构,编写程序实现文件系统的文件存储空间的管理、文件的物理结构、目录结构管理和文件操作。
三、实验要求
1、设计一个有m个用户的文件系统,每个用户最多可保存一个文件。
2、规定用户在一次运行中只能打开K个文件。
3、系统能检查键入命令的正确性,出错时应能显示出错原因。
4、对文件应能设置保护措施,如只能执行、允许读、允许写等。
5、对文件的操作设计提供一套文件操作:
CREATE建立文件;
DELETE删除文件;
OPEN打开文件;
CLOSE关闭文件;
READ读文件;
WRITE写文件。
6、二级目录结构如下图所示。
用户名 用户文件目录地址
主文件目录MFD
文件名 状态(打开/建立) 指针
用户文件目录UFD
实验8 文件管理(2学时)
一、实验目的
理解文件系统的主要概念及文件系统内部功能和实现过程。
二、实验内容
采用二级文件目录结构,编写程序实现文件系统的文件存储空间的管理、文件的物理结构、目录结构管理和文件操作。
三、实验要求
1、设计一个有m个用户的文件系统,每个用户最多可保存一个文件。
2、规定用户在一次运行中只能打开K个文件。
3、系统能检查键入命令的正确性,出错时应能显示出错原因。
4、对文件应能设置保护措施,如只能执行、允许读、允许写等。
5、对文件的操作设计提供一套文件操作:
CREATE建立文件;
DELETE删除文件;
OPEN打开文件;
CLOSE关闭文件;
READ读文件;
WRITE写文件。
6、二级目录结构如下图所示。
用户名 用户文件目录地址
主文件目录MFD
文件名 状态(打开/建立) 指针
用户文件目录UFD

代码片段和文件信息
#include
#include
#include
#include
using namespace std;
struct MFD{ // 主文件目录
string u_name; // 用户名
int addr; // 指向子目录指针
}mfd[10];
int mfdcnt; // 用户数
int k; // 每个用户最多打开的文件数
struct File{
string name; // 文件名
bool exist; // 0表示文件已经删除,1表示文件存在
bool state; // 0表示文件处于关闭状态,1表示打开状态
int protect; // 1表示只执行,2表示只读,3表示只写,4表示可读可写
string content; // 文件内容
void create();
void del();
bool open();
bool close();
void read();
void write();
};
struct UFD{ // 用户文件目录
File file[1000];
string u_name; // 用户名
int id; // 文件的总数
int cnt; // 用户文件存在的个数
int open_cnt; // 用户打开文件个数,最大为k
void init() { cnt=0; open_cnt=0; id=0;}
void create() { file[id].create(); cnt++; id++;}
void del(int pos) { file[pos].del(); cnt--;}
void open(int pos) {
if(open_cnt == k) cout<<“您已经打开了“< else {
if(file[pos].open() == 1) open_cnt++;
}
}
void close(int pos) { if(file[pos].close() == 1) open_cnt--; }
void read(int pos) { file[pos].read(); }
void write(int pos) { file[pos].write(); }
int Find(string name) {
int pos = -1; // 需要操作文件的位置
for(int i=0; i if(file[i].exist==1 && file[i].name==name) return pos=i;
cout << “找不到该文件,请检查文件名\n“;
return pos;
}
}ufd[10];
void see(string u_name){
int addr = -1;
for(int i=0; i if(mfd[i].u_name == u_name) addr = mfd[i].addr;
}
if(addr == -1) { cout << “没有该用户“ << endl;}
else{
UFD user = ufd[addr];
cout << “********************用户名“ << u_name << “********************\n“;
cout << “文件个数: “ << user.cnt << “\t文件打开数: “ << user.open_cnt << endl;
cout << “文件名\t文件状态\t文件权限\t文件内容\n“;
for(int i=0; i File f = user.file[i];
if(f.exist == 0) continue;
cout << f.name << “\t“;
if(f.state == 0) cout << “关闭\t\t“;
else cout << “打开\t\t“;
if(f.protect == 1) cout << “只执行\t\t“;
else if(f.protect == 2) cout << “只读\t\t“;
else if(f.protect == 3) cout << “可写\t\t“;
cout << f.content << endl;
}
cout << “*************************************************\n“;
}
}
void File::create(){
cout << “请输入文件名与文件权限(1只执行 2只读 3可写): “; cin >> name >> protect;
cout << “请输入文件内容: “; cin >> content;
exist = 1;
state = 0;
}
void File::del(){
exist = 0;
}
bool File::open(){
if(protect == 1) { cout << “打开失败,该文件为只执行文件!“ << endl; return 0;}
else if(state == 1) { cout << “该文件已处于打开状态“ << endl; return 0;}
else { state = 1; cout << “打开成功“ << endl; return 1;}
}
bool File::close(){
if(state == 0) { cout << “该文件已处于关闭状态“ << endl; return 0;}
else { state = 0; cout << “关闭成功“ << endl; return 1;}
}
void File::read(){
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5170 2018-06-13 20:36 main.cpp
文件 35840 2018-06-13 15:08 实验题目8.doc
文件 124818 2018-06-13 20:40 新建 Microsoft Word 文档.docx
- 上一篇:操作系统实验五 内存管理
- 下一篇:科东纵加客户端软件
相关资源
- 条码字体barcode128
- STM32蓝牙和串口程序
- UNICODE GBK双向码表二进制文件
- 常用编码(UnicodeUTF-8GBK)转换工具
- vc URL编解码类
- 中文转化unicoder码的方法
- codesys编程手册中文版
- XSS Encode
- LHC生命周期前沿的非弹性暗物质:A
- arm cortex m0 rtl code
- Xcode 12.3(16F156)安装包.zip
- windows 64位系统下安装Code Warrior6.3方法
- Zxing-Code_128一维码
- CODE128A 字体
- Code 128 字体
- INBarcodeOCR条码识别组件,识别率及速
- code39条形码字体
- 飞思卡尔68HC08Metrowerks_CodeWarrior开发软
- codewarrior使用指南中文版
- Code Warrior License 破解,各个版本可用
- Codewarrior HCS12 V5.1 license
- codewarrior6.3 win10环境可以安装的破解
- Codesys变成入门手册
- patchedcode.bin
- 奥科网关M1000B配置手册.docx
- icm20948_Sensor_Code.zip
- OzCode3.X Patch 注册机
- Qt实现Code39条形码
- shellcoder编程揭秘
- 黄金矿工源码
评论
共有 条评论