基于C语言的Linux环境的文件系统
一 需求分析
- 设计多用户文件系统,采用二级文件目录
- 要有多个实用命令,应设置文件保护措施
- 设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息
二 程序设计
系统框架如下图所示:
三 程序实现
3.1 关键数据结构
struct Unode //UFD
{
char FileName[8];
char str[32];
char ProCode[3];
int Length;
enum FileStatus Status;
struct Mnode *Dir;
struct Unode *Next;
};
struct Mnode //MFD
{
char DirName[8];
struct Unode *Dir;
struct Mnode *Next;
}
3.2 关键函数
AddUser(char *new) //添加用户
CloseFile(char *filename) // 关闭文件
DelFile(char *filename) // 删除文件
DisplayFils(void) // 显示当前目录
Login(char *userName) // 登录
ModPro(char *code) // 修改保护码
ReadFile() // 读文件
WriteFile(); // 写文件
OpenFile(char (filename)// 打开文件
InitFilsSystem() // 初始化系统
3.3 系统模块架构
如下图所示:
此系统一个字符串数组来模拟磁盘空间,程序运行时先初始化用户名构成单链表,每次插入新用户于表尾。
磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为0。当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟磁盘的线性分配。
3.4 算法流程图
如下图所示:
四 运行测试
如下图所示:
完整的源码和详细的文档,上传到了 【WRITE-BUG数字空间】,需要的请自取:https://www.writebug.com/code/0c436bff-c792-11ed-8039-6479f0e5e323/#