基于C语言的Linux环境的文件系统

一 需求分析

  • 设计多用户文件系统,采用二级文件目录
  • 要有多个实用命令,应设置文件保护措施
  • 设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息

二 程序设计

系统框架如下图所示:

【内附源码和文档】基于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 系统模块架构

如下图所示:

【内附源码和文档】基于C语言的Linux环境的文件系统_初始化_02

此系统一个字符串数组来模拟磁盘空间,程序运行时先初始化用户名构成单链表,每次插入新用户于表尾。

磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为0。当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟磁盘的线性分配。

3.4 算法流程图

如下图所示:

【内附源码和文档】基于C语言的Linux环境的文件系统_链表_03

四 运行测试

如下图所示:

【内附源码和文档】基于C语言的Linux环境的文件系统_初始化_04

【内附源码和文档】基于C语言的Linux环境的文件系统_链表_05

完整的源码和详细的文档,上传到了 【WRITE-BUG数字空间】,需要的请自取:https://www.writebug.com/code/0c436bff-c792-11ed-8039-6479f0e5e323/#